Você está na página 1de 19

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

ARRAYS: VECTORES Y MATRICES


Problemas Resueltos
Responsable : Ing. John Ledgard Trujillo Trejo
Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


Algoritmo Evaluacin_postulante tipo Array [1..1000] de carcter: nombresp Array [1..1000] de real: notas Array [1..100] de real: respuestas var real: Notap, Max, Min, suma caracter: resp, nombre entero: I, J, num_i nombresp: Nom_p, Nom_i respuestas: respc notas: notasp, notasi Inicio //carga del vector de nombres de postulantes// Para (I = 1 a 1000) hacer leer (nombre) Nom_p[I] nombre Fin_para
Ing. John Ledgard Trujillo Trejo

Se quiere hacer la evaluacin de mil postulantes para un cargo. Hacer un algoritmo que realice la calificacin considerando que: las primeras 40 preguntas el puntaje es 2 (correcto) y -1 (incorrecto), las siguientes 30 preguntas el puntaje es 3 y -1.5, las ultimas 30 preguntas el puntaje es 1 y -0.5. Calcular la nota promedia, la nota mnima y la nota mxima. La nota mnima de ingreso es de 120 ptos.

Algortmica I 2007-I

//carga del vector de respuestas correctas del examen// para (I = 1 a 100) hacer leer (resp) respc[I] resp fin_para //Clculo de la nota de postulante// para (I = 1 a 1000) hacer notap 0 para (J = 1 a 100) hacer leer resp si (J>= 1) y (J<=40) entonces si resp = respC[J] entonces notap notap + 2 sino notap notap 1 fin_si fin_si si (J>40) y (J<=70) entonces si resp = respC[J] entonces notap notap + 3 sino notap notap 1.5 fin_si fin_si Algortmica I 2007-I

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


si (J>70) entonces si resp = respC[J] entonces notap notap + 1 sino notap notap 0.5 fin_si fin_si fin_para Notasp[I] notap fin_para //constatacin si el postulante ha ingresado// numi 0 para (I = 1 a 1000) hacer si (Notasp[I] >= 120) entonces num_i num_i + 1 escribir (Nom_p[I], Notasp[I], ingreso) Nom_i[num_i] Nom_p[I] sino escribir (Nom_p[I], Notasp[I], no ingreso) fin_si Algortmica Ifin_para 2007-I Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


//calculo de la media aritmetica de las notas de todos los postulantes// suma 0 para (I = 1 a 1000) hacer suma suma + Notasp[I] fin_para media suma/1000 //Calculo de la nota mnima y la nota mxima de los ingresantes// Max Notasi[1] Min Notasi[1] para (I = 2 a num_i) hacer si Notasi[I] > Max entonces Max Notasi[I] fin_si si Notasi[I] < Min entonces Min Notasi[I] fin_si fin_para escribir la nota mxima es:, Max escribir la nota mnima es:, Min fin
Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


Un estudiante de la FISI quiere obtener un nuevo vector C de la combinacin de dos vectores A y B. La dimensin de los vectores A, B y C es N, M y M + N respectivamente. Los vectores son los siguientes: A[N] = 9, 21, 99, 101, ..., 999 B[M] = 0, 4, 9, 23, 45, 71, 100, ...., 9999 y C[N+M] = 0, 9, 9, 21, 23, 45, 71, 99, 100, 101, ..., 999, ...., 9999. N es diferente de M. Lo que se trata es de comparar los valores de los vectores A y B, el menor de ellos se agrega a C, ejemplo Si B[1]<A[1] entonces C[1] B[1] y asi sucesivamente. Considerar que si se acaban las comparaciones con el vector A entonces el resto de los elementos de B se agregaran explicitamente en C y si se acaban las comparaciones con el vector B entonces el resto de los elementos de Algortmica I 2007-I A se agregaran explicitamente en C.
ALGORITMO Intercalacion tipo Array [1..200] de real: vector1 Array [1..300] de real: vector2 Array [1..500] de real: vector3 Var vector1: A vector2: B vector3: C entero: N, M, real: num entero: i, j, k, r inicio N 200 M 300 //Ingresar datos vector1 num 0 para ( i de 1 a N) hacer escribir (Ingrese nmero:) leer (num) A[i] num fin_para Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


//Ingresar datos vector2 num 0 para ( i de 1 a M) hacer escribir (Ingrese nmero:) leer (num) B[i] num fin_para
//Intercalacin i 1 j1 k0 mientras ((i <=N) y (j <= M)) hacer //Seleccionar siguiente elemento de A o B y aadirlo a C kk+1 si (A[i] < B[j]) entonces C[k] A[i] ii+1 sino C[k] B[j] jj+1 fin_mientras Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


//copiar el vector restante si (i <= N) entonces para ( r = i a N) hacer kk+1 C[k] A[r]

fin_para
sino

para ( r = j a M) hacer fin_para fin_si


kk+1 C[k] B[r]

//Mostrar vector num 0 para ( i = 1 a M+N) hacer num C[i] escribir (num)

fin

fin_para

Algortmica I 2007-I

Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


Hay unos multicines con 5 salas, y cada sala con 100 personas distribuidas en 20 asientos y 5 filas. Si yo pido entrada para una sala, implementar un algoritmo que me diga si hay sitio en la sala.
Algoritmo cines tipo arreglo [1..salas, 1..asientos, 1..filas] de entero: multicine const SALAS = 5 ASIENTOS = 20 FILAS = 5 var multicine: multicine1 entero: num_sala, j ,k logico: marca

//k : nmero de fila, j: nmero de asiento

inicio repetir escribir (En qu sala quieres entrar?) leer (num_sala) hasta_que Algortmica I 2007-I ((num_sala >= 0) y (num_sala <= salas)) Ledgard Trujillo Trejo Ing. John

mientras (num_sala <> 0) hacer de Sistemas e Informtica - UNMSM Facultad de Ingeniera marca falso j1 k1 repetir si (j > asientos) entonces j1 kk+1 fin_si si ((j = asientos) y (k >= filas)) entonces escribir (Sala llena) marca verdadero sino si ((a [n_salas, j , k] = 0)) entonces [n_salas, j , k] 1 escribir (Asiento, j, fila, k) fin_si fin_si jj+1 hasta_que ((a [n_salas, j, k] = 1) o (marca = verdadero)) repetir escribir (En qu sala quieres entrar?) leer (num_sala) hasta_que ((num_sala >= 0) y (num_sala <= salas)) fin_mientras fin Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Dada una matriz A de M*M elementos, actualizarla tal que la matriz resultante tenga divididos a los elementos de la diagonal principal por la suma de los elementos que no forman parte de ella.
Algoritmo div_matriz tipo arreglo [1..M,1..M] de real: matriz var matriz: A real: suma, num Inicio // Ingreso de datos en la matriz A para (i de 1 a M) hacer para ( j de 1 a M) hacer escribir (Introduce el elemento, i ,, j) leer (num) A[i,j] num fin_para fin_para

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

Algortmica I 2007-I

Ing. John Ledgard Trujillo Trejo

//Suma de losde Ingeniera la matriz sin considerar la diagonal Facultad elementos de de Sistemas e Informtica - UNMSM suma 0 para (i de 1 a M) hacer para ( j de 1 a N) hacer si (i < > j) entonces suma suma + A [i,j] fin_si fin_para fin_para //Dividir la diagonal de la matriz con la suma para (i de 1 a M) hacer para ( j de 1 a N) hacer si (i = j) entonces A[i, j] A[i,j]/suma fin_si fin_para fin_para //Mostrar la nueva matriz para (i de 1 a M) hacer para ( j de 1 a N) hacer escribir (Elemento, i ,, j, : , A[i,j]) fin_para fin_para Algortmica I 2007-I fin Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


Tengo guardado en una estructura los alumnos de nuestra escuela, sabiendo que hay 10 semestres, M alumnos por ciclo y N asignaturas por alumno, determinar mediante un algoritmo: Cual es la nota media de un determinado semestre. Cuantos aprobados y desaprobados hay en una determinada asignatura. Cual es el alumno de la escuela con mejor nota media.
Algoritmo escuela Const SEMESTRE = 10 ALUMNOS = M ASIGNATURAS = N tipo arreglo [1..SEMESTRE, 1..ALUMNOS, 1..ASIGNATURAS de real: dato var dato: notas entero: i, j, k, resp real: media, suma, mayor entero: desp, ap, asig entero: alum, sem Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Inicio //Ingreso de notas desde (i = 1 hasta SEMESTRE) hacer desde (j = 1 hasta ALUMNOS) hacer desde k = 1 hasta ASIGNATURAS) hacer repetir escribir (Nota del alumno, j , asignatura, k, grupo, i) leer notas[i,j,k] hasta_que (notas[i, j ,k] >= 0) y (notas[i, j, k] <=20) fin_desde fin_desde fin_desde //Calculo de la media suma 0.0 repetir escribir De qu semestre quieres hacer la media? leer (resp) hasta_que (resp<=1) y (resp <= SEMESTRE) desde (j = 1 hasta ALUMNOS) hacer desde (k = 1 hasta ASIGNATURAS) hacer suma suma + n[resp, j, k] fin_desde fin_desde media suma /ALUMNOS*ASIGNATURAS escribir ( La Algortmica I 2007-I nota media del semestre , resp, es, media)

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


//Calculo de aprobados y suspensos Susp 0 Ap 0 repetir escribir (Qu asignatura quieres ver?) leer (asig) hasta_que (asig>=1) y (asig <= ASIGNATURAS) desde (i = 1 hasta SEMESTRE) hacer desde (j = 1 hasta ALUMNOS) hacer si (notas[i, j, asig] >= 11) entonces ap ap + 1 sino desp desp + 1 fin_si fin_desde fin_desde escribir (En la asignatura, asig, hay, ap, aprobados) escribir (En la asignatura, asig, hay, susp, suspensos) Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

Facultad de Ingeniera de Sistemas e Informtica - UNMSM


//Calculo de la mejor nota media. mayor 0.0 desde (i = 1 hasta SEMESTRE) hacer desde (j = 1 hasta ALUMNOS) hacer Suma 0.0 desde (k = 1 hasta ASIGNATURAS) hacer suma suma + notas [i, j , k] fin_desde media suma / asignaturas si (media > mayor) entonces mayor media sem i alum j fin_si fin_desde fin_desde escribir (El alumno con mayor media es el, alum, del semestre, sem) escribir (y su nota es de, mayor) fin Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

P( X ) A1 X N A2 X N '1 ... AN X AN 1

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

CALCULO NUMERICO DE UN POLINOMIO DE GRADO N: Calcular el valor numrico de un polinomio de grado N es reemplazar la variable y efectuar las operaciones pertinentes. Teniendo como premisa que la computadora solo sabe sumar y restar, almacenando previamente en un vector los coeficientes del polinomio haremos un algoritmo que calcule el valor numrico del polinomio P(X):

P ( X ) A1 X N A2 X N 1 ... AN X AN 1
para diferentes valores ingresados por teclado. Usar el siguiente mtodo para evaluar P(X):

P( X ) ((...(( A1 X A2 ) X A3 ) X ... AN 1 ) X AN ) X AN 1

Algortmica I 2007-I

Ing. John Ledgard Trujillo Trejo

P( X ) A1 X N A2 X N '1 ... AN X AN 1

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

#include <iostream.h> #include <conio.h> //Definicin de constantes #define NumElem 500 //nmero de elementos void main() { //Declaracin de variables float A[NumElem]; float coe, x, valorP, k; int ind, grapol, p, q; char opcion; do { clrscr(); //Ingresar grado de polinomio cout<<"Ingrese el grado del polinomio: "; cin>>grapol; //Ingreso de los coeficientes for(ind=0; ind<=grapol; ind++) { cout<<"A["<<ind+1<<"] =";cin>>coe; A[ind]=coe; }; Algortmica I 2007-I Ing. John Ledgard Trujillo Trejo

P( X ) A1 X N A2 X N '1 ... AN X AN 1

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

//Ingreso del valor de x cout<<"ingrese el valor de X : "; cin >> x; //Calculo del valor numerico valorP=A[0]; for(ind=1; ind<=grapol; ind++) { valorP = valorP*x+A[ind]; } cout << "El valor numerico para X = "<< x <<" es "<<valorP<<endl; cout << "Desea seguir calculando si o no (s/n)?"; opcion=getche(); } while (opcion == 's' ); getch(); } Algortmica I 2007-I

Ing. John Ledgard Trujillo Trejo

Você também pode gostar