Está en la página 1de 8

Ejercicios resueltos con vectores 1) Leido un vector V de 10 elementos enteros, copiar los elementos de V en W, pero sin elementos repetidos

(los que no estn repetidos). Se proponen para este ejercicio 2 soluciones: a) y b) Solucin a) PROGRAMA PP11() Int V[10], W[10] , T INICIO // Int V[]={4,2,3,4,2,3,4,8,9,8} en este vector 2,3 y 8 estn repetidos // y el 4 esta re-repetido // V sera el vector INICIAL y W el vector RESULTADO cargarVector(V,10) T copiaVector1(V,W,10) Mostrar El vector resultante es: mostrarVector(W, T) FIN Funcion copiaVector1(int V[], int W[], int N) Int T, I, J, K INICIO T 0 Para I=0, N-1 bb 0 // indica no repetido Para J=0, N-1 Si I<>J // para no comparar consigo mismo un elemento Entonces Si V[I]=V[J] //elementos iguales, pero con distintos ndices Entonces bb 1 //indicara repetido FinSi FinSi FinPara Si bb = 0 // cuando bb es cero el elemento no esta repetido Entonces W[T] V[I] : T++ // copia al vector RESULTADO FinSi FinPara Devolver T FIN Nota: SE SUPONDRA QUE LOS SUBPROGRAMAS cargarVector() y mostrarVector() SON LOS VISTOS EN CLASE, POR LO QUE YA NO SE LOS DESARROLLAN OTRA VEZ.

Solucin b) Programa PP12() Int J, V[10], W[10] INICIO cargarVector(V,10) J copiaVector2(V,W,10) Mostrar El vector resultante es: mostrarVector(W, J) FIN Funcion copiaVector2(int V[], int W[], int N) Int CC, J, K INICIO J0 Para K=0,N-1 // contaremos las veces que un elemento esta en el vector CC cuantasVecesXenV(V, V[K], 10) // X es V[K] Si CC = 1 //vemos que no esta repetido, entonces CC es 1 Entonces W[J]V[K] : J++ // copiamos en el otro FinSi FinPara Devolver J FIN NOTA: el subprograma cuantasVecesXenV() se encuentra ms abajo.

2) Leido un vector V de 10 elementos enteros, copiar los repetidos en W La solucin propuesta es: Programa PP2() Int J, V[10], W[10] INICIO cargarVector(V,10) J copiaVector3(V, W, 10) Mostrar El vector resultante es: mostrarVector(W, J) FIN

Funcion copiaVector3(int V[], int W[], int N) Int J, K, CC INICIO J0 Para K=0, N-1 // para saber si esta repetido, contaremos las veces que esta en el mismo vector CC cuantasVecesXenV(V,V[K], N) // V[K] es X Si CC > 1 //vemos que esta repetido, entonces CC es mayor a 1 Entonces // copiamos al vector RESULTADO W[J]V[K] : J j + 1// copiamos pero no verificamos que sea // re-repetido en el resultado FinSi FinPara FIN

3) Leido un vector V de 10 elementos enteros, copiar los repetidos en W, pero sin repetidos La solucin propuesta es una mejora al anterior ejercicio. // un elemento que se repite mas de una vez, puede copiarse tambin mas de // una vez en la solucin anterior, dando lugar a otro repetido en el vector // RESULTADO // mejoramos la solucin anterior controlando la copia al vector RESULTADO Programa PP3() Int J,V[10], W[10] INICIO cargarVector(V,10) J copiaVector4(V, W, 10) Mostrar El vector resultante es: mostrarVector(W, J) FIN

Funcion copiaVector4(int V[], int W[], int N) Int J, K, CC INICIO J0 Para K=0, N-1 // para saber si esta repetido, contaremos las veces que esta en el mismo vector CC cuantasVecesXenV(V,V[K], N) // V[K] es X Si CC > 1 //vemos que esta repetido, entonces CC es mayor a 1 Entonces // antes de copiar, verificamos si no esta ya en el vector RESULTADO PP buscaPosX(W,V[K], J) // V[K] es X Si PP <>-1 // cuando PP es -1, no esta aun copiado EntoncesW[J]V[K] : J J + 1 // finalmente copiamos al otro vector FinSi FinSi FinPara

// Este subprograma devuelve el indice de X, si esta en el vector // de lo contrario devuelve -1 Funcion buscaPosX(int V[], int X, int N) Int p, K INICIO P -1 Para K=0, N-1 Si X=V[K] Entonces P K FinSi FinPara Devolver P //si hay mas de uno, el ndice corresponde al ultimo FIN

// devuelve la cantidad de veces que X esta en el vector V Funcion cuantasVecesXenV(int V[], int X, int N) Int C, K INICIO C0 Para K=0, N-1 Si X=V[K] Entonces C C + 1 FinSi FinPara Devolver C FIN

EJERCICIOS RESUELTOS
EJEMPLO 1: LISTA DE ALUMNOS
Dada una lista de 50 alumnos de la materia de programacin y que consiste en: apellido, nombre y edad, la cual se supone que esta ordenada alfabticamente por apellido (de la A a la Z), se pide reordenar la lista pero en funcin de la edad (de menor a mayor) y luego mostrarla. La solucin se pude conseguir con los siguientes sub-programas: El subprograma que cargue los datos leerLista() El subprograma que muestre los datos mostrarLista() El subprograma que ordene los datos ordenarLista() Y el programa principal. A continuacin se hace el desarrollo de estos subprogramas. El programa principal es: // PROGRAMA PRINCIPAL Programa ordenarLista() Int edad[50] : String nom[50], ape[50] INICIO leerLista(nom, ape, edad, 50) mostrarLista(nom, ape, edad, 50, LISTA ORDENADA POR APELLIDO) ordenarLista(nom, ape, edad, 50) mostrarLista(nom, ape, edad, 50, LISTA ORDENADA POR EDAD) FIN

El subprograma que carga los datos es: // SUB-PROGRAMA QUE CARGA LOS DATOS DE LA LISTA Procedimiento leerLista(String A[], String B[], int E[], int N) Int k INICIO Para k = 0, N-1 Mostrar Digite el nombre : leer A[k] Mostrar Digite el apellido : leer B[k] Mostrar Digite la edad : leer E[k] FinPara FIN

El subprograma que muestra la lista de alumnos es: // SUB-PROGRAMA QUE MUESTRA LA LISTA DE LOS ALUMNOS Procedimiento mostrarLista(String nom[], String ape[], int E[], int N, String titulo) Int k INICIO Mostrar TITULO: , titulo Para k = 0, N-1 Mostrar ape[k], nom[k], E[k] FinPara FIN El ordenamiento con respecto al dato edad es: // SUB-PROGRAMA QUE ORDENA EN FUNCION DEL VECTOR DE EDADES Procedimiento ordenarLista(String nom[], String ape[], int E[], int N) Int I,J, aux : String aux1 INICIO Para I = 0, N-2 Para J = I+1, N-1 Si E[I] > E[J] Entonces aux E[I] : E[I] E[J] : E[J] aux : aux1 nom[I] : nom[I] nom[J] : nom[J] aux1 aux1 ape[I] : ape[I] ape[J] : ape[J] aux1 FinSi FinPara FinPara FIN

EJERCICIO 2: LISTA DE JUGADORES Dada una lista de 25 jugadores del club UNIVERSITARIO que consiste en: apellido, nombre, edad y peso y, la cual se supone que esta ordenada alfabticamente por apellido (de la A a la Z), se pide reordenar la lista y obtener otras 2 que son: Lista en orden de edad, de mayor a menor. Lista en orden de peso, de mayor a menor. La solucin es parecida a la anterior aunque se tienen ms datos de cada persona y, se la pude conseguir con los siguientes sub-programas: El subprograma que cargue los datos leerLista() El subprograma que muestre los datos mostrarLista() El subprograma que ordene los datos ordenarLista() Y el programa principal.

El desarrollo de estos subprogramas es el siguiente: //PROGRAMA PRINCIPAL Programa re-ordenarLista() Int edad[25], peso[25] : String nom[25], ape[25] INICIO leerLista(nom, ape, edad, peso, 50) mostrarLista(nom, ape, edad, peso, 50, LISTA ORDENADA POR APELLIDO) ordenarLista(nom, ape, edad, peso, 50) // ordena en funcin del vector edad mostrarLista(nom, ape, edad, peso, 50, LISTA ORDENADA POR EDAD) ordenarLista(nom, ape, peso, edad, 50) // ordena en funcin del vector peso mostrarLista(nom, ape, peso, peso, 50, LISTA ORDENADA POR PESO) FIN

// SUB-PROGRAMA QUE CARGARA LOS DATOS DE LA LISTA Procedimiento leerLista(String A[], String B[], int E[], int P[], int N) Int k INICIO Para k = 0, N-1 Mostrar Digite el nombre : leer A[k] Mostrar Digite el apellido : leer B[k] Mostrar Digite la edad : leer E[k] Mostrar Digite el peso : leer P[k] FinPara FIN

// SUB-PROGRAMA QUE MUESTRA LA LISTA Procedimiento mostrarLista(String nom[], String ape[], int E[], int P[], int N, String titulo) Int k INICIO Mostrar TITULO: , titulo Para k = 0, N-1 Mostrar ape[k], nom[k], E[k], P[k] FinPara FIN

// SUB-PROGRAMA QUE ORDENA EN FUNCION DEL TERCER PARAMETRO, // SI SE ENVIA COMO TERCER PARMETRO EL VECTOR DE EDADES, SE // ORDENA POR EDAD, PERO SI SE ENVIA EL DE PESOS COMO TERCER // PARAMETRO SE ORDENARA POR PESO. Procedimiento ordenarLista(String nom[], String ape[], int E[], int P[], int N) Int I,J, aux : String aux1 INICIO Para I = 0, N-2 Para J = I+1, N-1 Si E[I] > E[J] Entonces aux E[I] : E[I] E[J] : E[J] aux : aux P[I] : P[I] P[J] : P[J] aux : aux1 nom[I] : nom[I] nom[J] : nom[J] aux1 : aux1 ape[I] : ape[I] ape[J] : ape[J] aux1 : FinSi FinPara FinPara FIN

También podría gustarte