Ayuda con Arreglos

celio

Bovino maduro
#1
Señores este problema lo encontre planteado en el libro de algoritmos de Omar Trejos Buritica

Leer 10 enteros almacenados en un vector y determinar en que posición del vector esta el mayor numero par leido

esto es lo que llevo

VARIABLES: indice,pos_par,par_mayor: Entero
Vector[indice]

Inicio

Para(indice=1;indice<=10;indice=indice+1)
Leer Vector[indice] <-------------Aqui cargo el vector con 10 enteros
Si(Vector[indice] % 2 == 0)
par_mayor=Vector[indice] <----------De aqui saco los numeros pares del vector
Fin-Si
Fin-Para


Terminar



Haciendo una prueba de escritorio de este pseudocodigo en par_mayor me salen los numeros pares del vector
pero como hago para sacar el numero par mayor de ahi

Pense en asignarlos a un segundo vector pero:

Inicio

Para(indice=1;indice<=10;indice=indice+1)

Leer Vector[indice] <-------------Aqui cargo el vector con 10 enteros

Si(Vector[indice] % 2 == 0)

par_mayor=Vector[indice] <----------De aqui saco los numeros pares del vector

Para(indice=1;indice<=10;indice=indice+1)

Vector2[indice]=par_mayor <----------Es correcto que defina un vector dentro de este Para?

Fin-Para

Fin-Si

Fin-Para


Terminar
 

polkorn

Bovino maduro
#3
ok mira → tu llenado de numeros esta bien, y la manera en la que sacas los números pares igual esta bien ahora quieres saber la posición del número par mayor entonces lo que debes hacer es que cuando sacas los números pares pues los guardas en tu vector llamado Vector[indice] lo que debes hacer es que en ese vector solo mete un ciclo que compare todos los números y sacas el número mayor algo asi como esto:

Para_mayor(indice=1;indice<=10; indice = indice +1)
Para_mayor_par(indice2 = 2; indice2<=10; indice2 = indice2 + 1)
Comparar_par = Vector[indice] > Vector[indice2]
Si entonces
Mayor_Par = Vector[indice]
Vector[indice2] = Vector[indice]
y Fin.... algo así tendrias que hacer bakuno :) esper que te sirva.
 

Salandrews

Bovino maduro
#4
No es necesario un segundo vector. Solo necesitas una variable donde almacenar la posición del mayor. Aunque ya tienes código, no te puedo ayudar con lo que preguntas, pues es precisamente la idea del ejercicio. Puedes hacerlo con 2 vectores, si, pero solo escribirás más, tardarás más en analizarlo y encontrar la solución. Por qué no pruebas hacerlo mentalmente para la siguiente lista:

1 [0]
3 [1]
2 [2]
6 [3]
2 [4]
8 [5]
4 [6]

¿Cómo haces para determinar de esta lista, quien es el par mayor, empezando desde el primer número? ¿Qué procesos matemáticos haces? ¿Cómo retienes quien es el par mayor?¿Cómo haces para saber si hay un nuevo par mayor y cual es su nueva posición?
 

atxy2k

Bovino adicto
#5
Hibas bien.. xD

Mira, creo que seria mas facil utilizar dos variables para el problema que estas tratando plantear, sinceramente no soy muy bueno en lo que es pseudocodigo, nunca lo lleve en realidad, no lo vimos en la escuela, cosa rara :D pero bueno, entiendo lo que estas tratando de hacer, y creo que lo estas haciendo bien, mas bien en un principio hibas bien, en mi opinion no creo que sea necesario que utilizes otro arreglo, con el que tienes basta, solo necesitas agregar otra variable mas para que las cosas salgan bien, por ejemplo, tu tenias esto:

VARIABLES: indice,pos_par,par_mayor: Entero

Vector[indice]
Inicio
Para(indice=1;indice<=10;indice=indice+1)
Leer Vector[indice] <-------------Aqui cargo el vector con 10 enteros
Si(Vector[indice] % 2 == 0)
par_mayor=Vector[indice] <----------De aqui saco los numeros pares del vector
Fin-Si
Fin-Para
Terminar

Bien, el indice es la posicion actual en la que estas leyendo, esto esta bien, aunque generalmente ya en practica esta variable empieza en 0, ¿por que? por que los espacios de un vector generalmente se cuentan desde 0 hasta donde termine, por ejemplo si tu tienes un vector de 5 espacios, los indices van de 0,1,2,3,4 , si te fijas son 5 posiciones contando desde 0,
Ahora, la posicion par no creo que sea necesaria que la guardes, ya que lo que necesitas es la POS PAR MAYOR, y a parte necesitas los valores de cada numero PAR que encuentres para compararlo con el numero mas grande que vatas encontrando, no se si me explico:

Mira: Vas a leer el vector de uno en uno, cuando encuentres el primer numero par, ese sera el numero con mayor valor, entonces necesitarias guardar tanto su valor como su posición en dos variables, MAYOR, POS_MAYOR, aparte de tu INDICE,

Vamos a modificar tu codigo inicial un poco, y ya veras:

VARIABLES: INDICE, MAYOR,POS_MAYOR

MAYOR = 0; //Usamos cero solo para que cualquier numero que encontremos primero sea mayor
POS_MAYOR = -1; //Usamos -1 por que como el arreglo empieza de 0, si usaramos 0 y no existiera ningun numero impar te diria que el primer espacio del vector, aunque no sea par, seria el mayor, por eso usamos un numero que no se encuentre dentro de las posiciones del arreglo.

Para(indice=0;indice<10;indice=indice+1)
Leer Vector[indice] <-------------Aqui lees cada uno de los numeros
Si(Vector[indice] % 2 == 0 Y Vector[indice]>MAYOR) <---------------- Una condicion "Y" es lo que creo que te faltaba
MAYOR = Vector[indice] < ---------- Guardamos el valor que se encuentre en el indice y "suponemos que es el mayor"
POS_MAYOR=indice <---------- Aca guaradas la posición del numero mayor, asi cada vez que se encuentre un numero par y mayor que este se guardara,
Fin-Si
Fin-Para

Y de esta manera podrias obtener el numero mayor par dentro del arreglo, espero que mas que nada, la explicación te haya servido, ya que solucionarte el problema no lo hara. xD jajaja! :D
 

celio

Bovino maduro
#6
Listo señores ante todo gracias pero aun asi no me sale miren:

Inicio

Para (indice=1;indice<=10;indice=indice+1)
Ingrese numero
Leer Vector[indice]
Fin-Para

Para (indice=1;indice<=10;indice=indice+1)
Si(Vector[indice] % 2 == 0)
par=Vector[indice]
mayor=par
posicion=indice
Si(Vector[indice] > mayor)
mayor=par
posicion=i
Fin-si
Fin-si
Fin-Para
Terminar
Al hacer la prueba de escritorio no me quiere dar , a los que miren el codigo por favor miren donde estoy equivocado
A los anteriores colaboradores les agradezco mucho por sus concejos
Gracias
 

atxy2k

Bovino adicto
#7
Listo señores ante todo gracias pero aun asi no me sale miren:



Al hacer la prueba de escritorio no me quiere dar , a los que miren el codigo por favor miren donde estoy equivocado
A los anteriores colaboradores les agradezco mucho por sus concejos
Gracias
No te esta saliendo por que estas separando la condición que te habia comentado en dos amigo, en programación, dentro de la condicion de un Si puedes meter dos restricciones, Si esto es par y es mayor que esto, por ejemplo, jejeje! checate.

Para (indice=0;indice<10;indice=indice+1)
Ingrese numero
Leer Vector[indice]
Fin-Para

Para (indice=0;indice<10;indice=indice+1)
Si(Vector[indice] % 2 == 0 Y Vectoint posMayor = -1;
int mayor=0;
for (int i = 0; i < 10; i++) {
if (vec%2==0 && vec>mayor) {
posMayor = i;
mayor = vec;
}
}r[indice] > mayor) // Aca es donde necesitas dos condiciones, no una
mayor=Vector[indice]
posicion=indice
Fin-si
Fin-Para

En dado caso si quisieras separar las condiciones seria algo como

Para (indice=0;indice<10;indice=indice+1)
Si(Vector[indice] % 2 == 0) // primera condicion
Si (Vector[indice]>mayor) //segunda
mayor=Vector[indice]
posicion=indice
Fin_si
Fin-si
Fin-Para

Te recuerdo que los indices de un vector inicializan en cero, ya que si no lo haces asi tendras errores a la hora de ejecutarlo, ya que cuando llegue al final y pida una posicion 10 cuando en el vector de 10 espacios solo se llega hasta 9, por que como te digo, cuenta el cero, y del cero al 9 hay 10 espacios, eso significa que el numero 10 no entra, asi que al pedir un numero 10 se volcaria tu programa.


Aca te dejo unos retacitos de codigo escrito en java

int posMayor = -1;
int mayor=0;
for (int i = 0; i < 10; i++) {
if (vec%2==0 && vec>mayor) {
posMayor = i;
mayor = vec;
}
}

Obvio falta la parte donde lees, pero lo principal es esto, date un ejemplo, es sencillo.
 

celio

Bovino maduro
#8
Ok Lo saque asi:

Inicio

Para(indice=1;indice<=10;indice=indice+1)
Leer Vector[indice]
Fin-Para

indice=1;
mayor=Vector[indice]
Mientras que indice<=10
Si(Vector[indice] > mayor ^ Vector[indice] mod 2==0)
mayor=V[indice]
posicion=indice
Fin-si
indice=indice+1
Fin-Mientras

"el mayor es",mayor "y esta en la posicion",posicion

Terminar


Hice la prueba de escritorio con los siguientes datos:


indice V[indice] mayor posicion
1 11 11 1
2 6 -
3 24 24 3
4 4 - -
5 36 36 -
6 7 -
A las personas que me respondieron muchas gracias y ante todo agradezco su paciencia
 
#10
Lo tienes bien ;) me gusta, lo que no se muy bien es si en seudocodigo se pone ^ o and o &&. me decantaría por and porque lo normal es que ^ sea más bien un operador para hacer exponentes de tipo 2^5 que es como decir 2*2*2*2*2
 
Arriba