Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 Algoritmos 2º Semestre del 2003 1. Realice un algoritmo que dado dos vectores llamados A y B respectivamente, los cuales se encuentran con datos enteros ordenados en forma ascendente sean transferidos en tercer vector C sin incluir los datos repetidos. Ejemplo: 3 5 7 8 13 A=1................... A=5 4 7 8 B=1.......B=3 Vector resultado 3 4 5 7 8 13 C=1............................ C=6 Desarrollo. Algoritmo: Vectores Variable: entero i, j, k. Arreglo [1.........25] enteros: A, B, C Arreglo [1.........50] enteros: C Inicio i = 1; j = 1; k = 1; mientras (i <25 y j<25)hacer { si(A[i] < B[j]) entonces { C[k] = A[i]; i ++; } sino { si (A[i] = B[j]) entonces { C[k] = A[i]; i ++; j ++; } sino { 1 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 C[k] = B[j]; j ++; } } } si (i >= 25 y j ≠ 25) entonces { C[k] = B[j]; j ++; k ++; } si (i < 25 y j >= 25) entonces { C[k] = A[j]; i ++; k ++; } } /* fin inicio */ 2. Desarrollar un algoritmo en pseudocódigo que lea los nombres y los precios de las panaderías de Valparaíso, y entregue los nombres y precios de las N panaderías con el menor precio. Desarrollo. Algoritmo: Panaderías. Variable: entero: inicio, fin, num, sgte, aux1, aux2, i Arreglo [1.........50] enteros: A, B Donde: A: corresponden a las panaderías. B: corresponde a los respectivos precios de cada panadería. Inicio { repetir { escribir (‘Ingrese número de panadería a mostrar los menores precios’); leer (num); } hasta que (num < 50) fin = 50; inicio =1; mientras (fin > 1) hacer { 2 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 sgte = inicio +1; mientras (sgte <= fin) hacer { si (B[inicio] > B [sgte]) entonces { aux1 = B[inicio ] /* este ciclo permite un ordenamiento */ aux2 = A[inicio ] /* burbuja de los elemntos contenidos */ B[inicio] = B [sgte] /* tanto en el vector de precios como el */ A[inicio] = A [sgte] /* vector del nombre de las panaderías.*/ B[sgte] = aux1 A[sgte] = aux2 } sgte ++; } inicnio++ fin = fin -1; }/* los dos ciclos anteriores permiten ordenar las panadería en forma ascendente de acuerdo a los precios más baratos hasta los más caros.*/ i=1; mientras (i <= num) hacer { escribir (‘Las panaderías más baratas con sus respectivos precios son: ‘); escribir (A[i], B[i]); } /* el ciclo muestra la cantidad de panaderías más baratas que se solicitaron }/* fin del inicio */ 3. Desarrollar un algoritmo que lea un conjunto de números, obtenga para cada uno de ellos las suma de los dígitos, y entregue como resultado el número cuya suma de los dígitos sea la mayor, entre todos los números ingresados por el usuario. Desarrollo: Algoritmo: Numero_mayor Variables: entero: mayor, suma, numero, auxiliar, valor caracter: resp, Inicio { mayor = 0; repetir { repetir { escribir(‘ingrese numero’) leer(numero) }hasta (numero > 0) 3 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 auxiliar = numero suma = 0 repetir { suma = numero MOD 10 + suma numero = numero DIV 10 }hasta(numero = 0) Si (suma > mayor) entonces mayor = suma valor = auxiliar fin si escribir(‘Desea ingresar otro número (S/N): ’) leer(resp) }hasta (resp = ‘N’) escribir (‘El valor cuya suma de sus dígitos es mayor es’, valor); escribir (‘La suma de sus dígitos es: ‘, mayor) } 4. Diseñe un algoritmo para calcular e imprimir los 15 primeros reglones de una tabla, de acuerdo con las siguientes reglas: La tabla va ha tener cuatro columnas llamadas N, A, B, C. Los valores en el primer reglón de la tabla son 0, 1, 1, 1. El valor de N es mayor en 1 que su valor en el reglón anterior El valor de A es dos veces mayor que su valor en el reglón anterior. El valor de B es la suma de los valores de A hasta C, del reglón anterior. El valor de C es la suma acumulada de los valores de B. Desarrollo Variables: entero: reglon, N, A, B, C, i, j, k, suma Arreglo [1…15, 1…4] de entero: tabla Inicio tabla[1,1]= 0, tabla[1,2]= 1, tabla[1,1]= 1, tabla[1,1]= 1 i =2 mientras(i < 15 ) hacer j=1 mientras (j<4) hacer Si(j=1) entonces tabla[i,j] = tabla [i-1,j] + 1 fin si Si(j=2) entonces 4 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 tabla[i,j] = tabla [i-1,j] + 2 fin si Si(j=3) entonces tabla[i,j] = tabla [i-1,j-1] + tabla[i-1,j]+tabla[i-1,j+1] fin si Si(j=4) entonces k=1, suma =0 mientras(k<i) hacer suma = tabla[k,j] k++ fin mientras tabla [i,j] = suma fin si j++ fin mientras i++ fin mientras i=1 mientras (i<15) j=1 escribir(‘El reglón’, i,’los valores de N,A,B,C respectivamente son: ‘) mientras (j<4) escribir (tabla[i,j]) j++ fin mientras i++ fin mientras fin inicio 5. Se desea obtener el grado de eficiencia de 250 operarios de una fábrica productora de tornillos, de acuerdo a las siguientes condiciones: Ausencia al trabajo ≤ 3.5 horas Tornillos defectuosos < 300 Tornillos producidos > 10000 Los grados de eficiencia para cada trabajador son asignados de la siguiente forma: Si no cumple con ninguna condición Si sólo se cumple la primera condición Si sólo se cumple la segunda condición Si sólo se cumple la tercera condición Si cumple la primera y segunda condición grado = 5 grado = 7 grado = 8 grado = 9 grado = 12 5 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 Si cumple la primera y tercera condición Si cumple la segunda y tercera condición Si cumple las tres condiciones grado = 13 grado = 15 grado = 20 Los datos para cada trabajador son los siguientes: Código del trabajador Horas de ausencia Tornillos defectuosos Tornillos producidos. Diseñe un algoritmo que, de acuerdo a los datos de cada trabajador, calcule su correspondiente grado de eficiencia y que determine en que grado se encuentra la mayor cantidad de trabajadores. Algoritmo: Eficiencia Variables: entero: aux1, aux2, aux3, i, j, cond1, cond2, cond3, cond4, cont1, cont2, cont3, cont4, cont5, cont6, cont7, cont8 Arreglo [1…250, 1…4] de enteros: T Donde: T es la matriz que almacena los datos de los trabajadores de la empresa. Inicio cont1=0, cont2=0, cont3=0, cont4=0, cont5=0, cont6=0, cont7=0, cont8=0 i=1 mientras(i<=250) hacer aux1=0; aux2=0; aux3=0; j=2 mientras(j<=4) hacer si (j=2) entonces si(T[i,j] <= 3.5)entonces aux1=1; fin si fin si si (j=3) entonces si(T[i,j] < 300)entonces aux2=1; fin si fin si si (j=4)entonces si(T[i,j] > 10000) entonces aux3=1; fin si fin si 6 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 j++ fin mientras si (aux1=0 y aux2=0 y aux3=0) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 5’) cond1 ++ fin si si (aux1=1 y aux2=0 y aux3=0) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 7’) cond2 ++ fin si si (aux1=0 y aux2=1 y aux3=0) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 8’) cond3 ++ fin si si (aux1=0 y aux2=0 y aux3=1) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 9’) cond4 ++ fin si si (aux1=1 y aux2=1 y aux3=0) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 12’) cond5 ++ fin si si (aux1=1 y aux2=0y aux3=1) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 13’) cond6 ++ fin si si (aux1=0 y aux2=1 y aux3=1 entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 15’) cond7 ++ fin si si (aux1=1 y aux2=1 y aux3=1) entonces escribir (‘El empleado’, T[i,1], ‘posee grado de eficiencia = 20’) cond8 ++ fin si i++ fin mientras escribir (cont1, ‘Se encuentran en la categoría grado 5’) escribir (cont2, ‘Se encuentran en la categoría grado 7’) escribir (cont3, ‘Se encuentran en la categoría grado 8’) escribir (cont4, ‘Se encuentran en la categoría grado 9’) escribir (cont5, ‘Se encuentran en la categoría grado 12’) escribir (cont6, ‘Se encuentran en la categoría grado 13’) escribir (cont7, ‘Se encuentran en la categoría grado 15’) escribir (cont8, ‘Se encuentran en la categoría grado 20’) fin inicio 7 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 6. En una Universidad se efectúa un examen de admisión que costa de dos pruebas: Aptitud Matemáticas y Aptitud Verbal. Cada prueba consta de 30 preguntas de selección múltiple y cada pregunta tiene 5 opciones numeradas de 1 a 5. Las respuestas se registraron en una hoja de respuestas con 60 líneas de una sola posición, que contiene, cada una, la respuesta a la pregunta correspondiente. Las 30 primeras posiciones corresponden al examen de Aptitud Matemática y las restantes a la Aptitud Verbal. Se presentaron en el examen N estudiantes. Diseñar un algoritmo que entregue la siguiente información: El puntaje obtenido por cada estudiante en cada examen. El puntaje total obtenido por cada estudiante. El puntaje promedio de cada examen. El puntaje promedio total. El número de estudiantes (identificación) y el puntaje correspondiente de los estudiantes que obtuvieron igual o superior al promedio. Nota: El manejo para la pauta de corrección de las pruebas queda a la creatividad. 7. El cálculo frecuente efectuado en el Análisis Financiero es el cálculo de la “Depreciación”. Una técnica muy común para hacerlo es el método de “la suma de los dígitos de los años“. Por ejemplo: Suponga que $150.000 serán depreciados mediante un periodo de 5 años. La suma de los dígitos de los años 1+2+3+4+5=15. De acuerdo con este método, entonces 5/15 de $150.000 es depreciado el primer año, 4/15 el segundo, etc. Diseñe un algoritmo que a partir de la cantidad a ser depreciada y el número de años considerado para la depreciación, obtenga para cada uno de los años, la depreciación respectiva. 8. Diseñe un algoritmo que para un vector A de orden n, al cual se ingresan valores enteros positivos ordenados en forma ascendente, ubique un elemento x mediante el método de búsqueda binaria. El Método de Búsqueda Binaria consiste en comparar el elemento buscado con el que ocupa en la lista la posición central y, según sea mayos o menor que la central, repetir la operación considerando una sublista formada por los elementos buscados en la posición central +1 y el último, ambos inclusive, o por los que se encuentran entre el primero y el ubicado en la posición central -1, también ambos inclusive. El proceso finalizará cuando el elemento sea encontrado o la sublista de búsqueda quede sin elementos. 9. Sea la serie definida por: a1 = 0; a2 = 3 * an-1 + 2 * an-2 (para n ≥ 3) Diseñe un algoritmo que permita obtener el valor y el rango del primer término que sea mayos o igual a X, X ≥ 0 8 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 Ejemplo: a1 = 0 a2 = 1 a3 = 3 * 1 + 2 * 0 = 3 a4 = 3 * 3 + 2 * 1 = 11 a5 = 3 * 11 + 2 * 3 = 39 a6 = 3 * 39 + 2 * 11 = 139 El primer término cuyo valor es mayor o igual a 100 es a 6(rango -6) con un valor igual a 139. 10. Desarrolle un algoritmo que lea un número entero y entregue como resultado el número que resulta al invertir sus dígitos. 11. De sarrollar un algoritmo que lea la posición de un caballo en un tablero de ajedrez y entregue las posiciones posibles hacia las cuales el caballo puede moverse. Los movimientos del caballo se realizan en forma de L, existiendo como máximo ocho posibilidades. Arriba 2 – izquierda 1 Arriba 2 – derecha 1 Izquierda 2 - Arriba 1 Izquierda 2 – abajo 1 Derecha 2 - arriba 1 Derecha 2 – abajo 1 Abajo 2 – izquierda 1 Abajo 2 – derecha 1 12. Una empresa requiere la información correspondiente al sueldo líquido de sus empleados. El cálculo del sueldo líquido requiere del sueldo bruto, la tasa de impuesto y el número de cargas familiares. Además existe un valor po cada carga familiar, que es igual para todos los empleados. Para obtener el sueldo líquido se utiliza la siguiente expresión: Sueldo líquido=sueldo bruto – (sueldo bruto * tasa impuesto)+valor carga * Nº de cargas La tabla de tasa de impuesto se obtiene de acuerdo a la siguiente tabla: Sueldo bruto ≤ $ 150.000 $ 150.000 < Sueldo bruto ≤ $ 250.000 $ 250.000 < Sueldo bruto ≤ $ 350.000 Sueldo bruto > $ 350.000 tasa = 0% tasa = 8% tasa = 13% tasa = 20% Siendo el valor de la carga familiar de $ 5.000 9 Universidad Católica de Valparaíso. Facultad de Ingeniería. Escuela de Informática. Informática I / INF – 140 10