Ingeniería en Sistemas de Información Algoritmos y estructuras de datos Guía de ejercicios N2 v1.3 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 Índice Índice ....................................................................................................................................................... 2 Guía de resolución .................................................................................................................................. 3 Estructuras de control – Subprogramas .............................................................................................. 3 200. ........................................................................................................................................... 3 201. ........................................................................................................................................... 3 202. ........................................................................................................................................... 3 203. ........................................................................................................................................... 3 204. ........................................................................................................................................... 3 205. ........................................................................................................................................... 3 206. ........................................................................................................................................... 4 207. ........................................................................................................................................... 4 208. ........................................................................................................................................... 4 209. ........................................................................................................................................... 4 210. ........................................................................................................................................... 4 211. ........................................................................................................................................... 5 212. ........................................................................................................................................... 5 213. ........................................................................................................................................... 5 214. ........................................................................................................................................... 5 215. ........................................................................................................................................... 5 216. ........................................................................................................................................... 5 217. ........................................................................................................................................... 6 218. ........................................................................................................................................... 6 219. ........................................................................................................................................... 6 220. ........................................................................................................................................... 7 221. ........................................................................................................................................... 7 222. ........................................................................................................................................... 7 223. ........................................................................................................................................... 7 224. ........................................................................................................................................... 7 225. ........................................................................................................................................... 8 226. ........................................................................................................................................... 8 227. ........................................................................................................................................... 8 228. ........................................................................................................................................... 8 229. ........................................................................................................................................... 9 Referencias ........................................................................................................................................... 10 Página 2 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 Guía de resolución La solución de los ejercicios consiste en el desarrollo de los pasos que se mencionan a continuación: 1) 2) 3) 4) 5) 6) 7) 8) 9) Comprensión del enunciado Especificación de los datos de entrada y de salida Confección de la estrategia de solución (Top-Down) Confección del algoritmo de resolución (refinamientos sucesivos) Seguimiento del algoritmo Codificación Compilación Preparación del lote de prueba Ejecución y depuración del programa Estructuras de control – Subprogramas 200. En la URL http://armorgames.com/play/2205/light-bot se accede a un juego flash que consiste en definir los movimientos de un robot a través de ciertos obstáculos. El ejercicio consiste en jugar el juego y documentar la solución encontrada para cada escenario o pantalla. Se debe entregar un documento digital indicando las soluciones encontradas. Se recomienda utilizar la función PrintScreen. 201. Diseñar un procedimiento que solicite el ingreso de dos números e imprima la suma. 202. Diseñar un procedimiento que imprima el siguiente mensaje y se quede esperando a que el usuario presione la tecla Enter para continuar con la ejecución del mismo retornando el control al subprograma llamador. PRESIONE ENTER PARA CONTINUAR 203. Diseñar un procedimiento que aplique los procedimientos definidos en los dos ejercicios anteriores para mostrar por pantalla el resultado de la suma de dos números. 204. Definir un procedimiento que solicite el ingreso de 5 valores e imprima los tres mayores. 205. Dados los coeficientes de una ecuación polinómica de segundo grado, calcular sus raíces, para lo cual se debe: a) Definir procedimientos para la entrada de datos con los mensajes aclaratorios correspondientes b) Calcular las raíces para cada uno de los tres casos posibles c) Para la salida, definir: i. Un procedimiento que permita imprimir los resultados en el caso de tener dos raíces reales ii. Un procedimiento para imprimir el resultado en el caso de obtenerse una raíz real doble Página 3 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 iii. Un procedimiento para imprimir los resultados completos en forma binómica, teniendo en cuenta las siguientes consideraciones: 1. No debe aparecer el coeficiente imaginario cuando éste es igual a 1 Ejemplo: 3 + i; 2 – i; i 2. No debe aparecer el término real cuando éste es igual a cero. 206. Definir los procedimientos necesarios para: a) Dar entrada a nueve valores numéricos utilizando un solo procedimiento que ingrese todos los valores; b) Realizar un procedimiento que reciba tres argumentos numéricos X, Y, Z almacenando en X el mayor, en Z el menor y el restante en Y, retornando éstos valores al programa principal. Luego de definir ambos procedimientos construir el programa principal que permita ingresar nueve valores numéricos y obtener el mayor y el menor de ellos. Deben utilizarse a tal efecto los procedimientos definidos en los puntos a y b. 207. Realizar los cambios necesarios sobre el algoritmo de solución del ejercicio anterior, para procesar 9 palabras, informándose la menor y la mayor, en orden alfabético. 208. Ingresar tres números Nro1, Nro2, Nro3 y a continuación presentar por pantalla el siguiente menú: 1. Imprimir el promedio de los tres valores 2. Imprimir el mayor 3. Imprimir el menor 4. Imprimir ordenados de mayor a menor 5. Imprimir ordenados de menor a mayor Digite una opción Cada opción debe mostrar por pantalla el resultado correspondiente. Si se pulsara una tecla que no fuera alguna de las propuestas, se debe imprimir el mensaje: OPCIÓN NO CONTEMPLADA y se dará por terminada la ejecución del programa. El programa debe usar selección múltiple, y debe tener en cuenta el criterio de reusabilidad, aplicando el procedimiento del ejercicio ¡Error! No se encuentra el origen de la referencia. para ordenar tres números al resolver las opciones 2 a 5. 209. Una empresa que se dedica a participar en carreras desea un programa que determine cuáles de sus 15 autos son los tres mejor clasificados para competir en una determinada carrera. Para ello se ingresan por teclado los datos de cada auto: número de coche, nombre del conductor, hora de salida y hora de llegada en MMSS. Ejemplo: 1 minuto 32 segundos se ingresa como 132. 20 minutos 45 segundos se ingresa como 2045. 210. Se debe programar un juego que consiste en que un primer jugador selecciona un número entre 1 y 100 y el segundo jugador debe adivinarlo, para lo cual irá ingresando números hasta descubrirlo. Ante cada intento, el programa debe informar al segundo jugador si el número que ingresó es mayor o menor que el que debe descubrir. Cuando el segundo jugador acierta el número, el programa debe mostrar por pantalla el mensaje correspondiente informando además la cantidad de intentos fallidos; luego, debe dar la opción de finalizar el programa o reiniciar el juego. Página 4 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 El programa debe validar los ingresos de datos, emitir los mensajes de error en tal caso, y emitir los mensajes apropiados para orientar al usuario ante cada situación en la que deba interactuar con el programa. 211. Dada la siguiente función: FUNCTION Suma(Num1, Num2 : INTEGER): INTEGER; BEGIN Suma := Num1 + Num2 END; Desarrollar un programa que implemente la función y efectuar el seguimiento de las variables indicando qué valores tienen a medida que se ejecuta, para varios juegos de datos. 212. Desarrollar una función que calcule el factorial de un número, y un programa principal que solicite números para mostrar su factorial. 213. Definir una función EsMultiplo(A, B) que retorne TRUE si A es múltiplo de B y FALSE en caso contrario. 214. Dado el siguiente programa codificado en PASCAL, escribir el enunciado correspondiente, diagramar el algoritmo y realizar el seguimiento con diferentes juegos de datos: PROGRAM EjercicioDeProcedimientoEsMultiploDe; FUNCTION EsMultiploDe (UnNumero, Numero: LONGINT):BOOLEAN; BEGIN WHILE UnNumero > 0 DO UnNumero := UnNumero - Numero; EsMultiploDe := (UnNumero = 0); END; VAR UnNumero, PosibleDivisor: LONGINT; BEGIN WRITELN ('Ingrese un numero entero'); READLN (PosibleDivisor); WRITELN('Ingrese un posible Multiplo'); READLN (UnNumero); IF EsMultiploDe (UnNumero, PosibleDivisor) THEN WRITELN ('El numero ', UnNumero, ' es multiplo de ', PosibleDivisor) ELSE WRITELN ('El numero ', UnNumero, ' NO es multiplo de ', PosibleDivisor); END. 215. Dado un conjunto de fechas (AAAAMMDD), mostrar por pantalla a qué mes (literal) corresponde cada una. 216. Construir un programa en PASCAL tal que, dada una lista de enteros positivos, imprima por pantalla: Página 5 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 • • • La cantidad de números pares. La cantidad de múltiplos de 5. La cantidad de múltiplos de un número N ingresado por teclado. 217. Desarrollar un programa PASCAL que permita ingresar tres números Nro1, Nro2 y Nro3 y calcule el promedio Prom aplicando exclusivamente las funciones Suma(A, B), que retorna el resultado de A + B, y Cociente(A, B), que retorna el cociente entre A y B. 218. Dada una lista de pasajeros que se registran para realizar un viaje, y por cada uno de ellos su Nombre, Destino (Rosario, Córdoba, o San Luis), y KilogramosDeEquipaje, mostrar un mensaje indicando por cada pasajero el exceso si transporta más de 20 Kg., e informar: • El porcentaje de pasajeros correspondiente a cada destino. • Los kilogramos promedio de equipaje por pasajero. Se debe implementar y aplicar la función Porcentaje(A ,B), que devuelve el porcentaje de A con respecto a B, y un procedimiento tal que dados A y B imprima el mensaje de exceso de equipaje si A es mayor que B. 219. Dado el siguiente programa en PASCAL, determinar su funcionalidad, la de cada módulo, y modificar los identificadores y mensajes con nombres significativos: PROGRAM QueHace; USES CRT; FUNCTION Corte: CHAR; VAR Car: CHAR; BEGIN REPEAT WRITE ( ' ¿Desea probar nuevamente? (s/n): ' ); Car:= UPCASE (READKEY) UNTIL ((Car = 'S') OR (Car = 'N')); Corte := Car END; PROCEDURE ProcX (VAR PDato1, PDato2: BYTE; VAR PDato3: WORD); BEGIN WRITE ( ' Ingrese xxxx: ' ); READLN ( PDato1 ); WRITE ( ' Ingrese xxxx: ' ); READLN ( PDato2 ); WRITE ( ' Ingrese xxxx: ' ); READLN ( PDato3 ) END; FUNCTION FuncX1 (PDato3: WORD): BOOLEAN; BEGIN FuncX1 := (PDato3 MOD 4 = 0) AND NOT ((PDato3 MOD 100 = 0) AND (PDato3 MOD 400 = 0)); END; FUNCTION FuncX2 (PDato3:WORD): WORD; BEGIN IF FuncX1 (PDato3) THEN FuncX2 := 29 ELSE FuncX2 := 28; END; Página 6 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 FUNCTION FuncX3 (PDato1, PDato2: BYTE; PDato3: WORD): BOOLEAN; VAR Tope: BYTE; BEGIN Tope := 0; CASE PDato2 OF 1, 3, 5, 7, 8, 10, 12: Tope:= 31; 4, 6, 9, 11: Tope:= 30; 2: Tope:= FuncX2(PDato3) END; FuncX3:= (Tope > 0) AND (PDato1 <= Tope) AND (PDato1 > 0) AND (PDato2 > 0) END; VAR Dato1, Dato2: BYTE; Dato3: WORD; BEGIN CLRSCR; REPEAT ProcX (Dato1, Dato2, Dato3); IF FuncX3 (Dato1, Dato2, Dato3) THEN WRITELN ( ' Ingreso correcto de xxxxxxxx ' ) ELSE WRITELN ( ' El ingreso de xxxxxx NO es correcto ' ); UNTIL (Corte = 'N'); WRITELN ('Presione ENTER para salir'); READLN END. 220. Definir una función que calcule la diferencia en días entre dos fechas válidas. Asumiendo que los meses tiene exactamente 30 días y que los años tienen exactamente 360 días. 221. Definir una función que califique a un alumno con S (Sobresaliente = 10), D (Distinguido = 8 o 9), B (Bueno = 7 o 6), R (Regular = 0 a 5), a partir de su nota dada como parámetro. La función debe recibir un valor entero como parámetro y devolver un valor de tipo CHAR. 222. Definir una función que devuelva la primera palabra en orden alfabético, a partir de tres palabras dadas como parámetros. 223. Ante una jugada de PRODE se procesan los datos correspondientes a los 13 partidos. De cada uno de ellos se conoce el NumeroDePartido, el TotalDeGolesLocal y el TotalDeGolesVisitante Diseñar el algoritmo y el programa en PASCAL que: • Al finalizar de ingresar los datos de un partido imprima “Ganador LOCAL”, “Ganador VISITANTE”, o “Ganador EMPATE”, según corresponda • Y Al finalizar de ingresar todos los partidos imprima el porcentaje de Ganador LOCAL, Ganador VISITANTE y Ganador EMPATE. 224. Dado un conjunto de valores enteros, calcular e imprimir: • Cuántos valores cero hubo. • El promedio de los valores positivos. • La sumatoria de los valores negativos. Página 7 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 225. Diseñar los 5 algoritmos y los 5 programas en PASCAL que procesen cada uno de los siguientes lotes de datos: 1. 167 valores enteros. 2. N valores. 3. Un conjunto de valores que termina con un valor igual al último leído. 4. N valores, pero se debe finalizar el ingreso al llegar al cuarto cero ingresado. 5. N valores, pero también deberá finalizar si se cumple alguna de las condiciones indicadas en 2, 3, ó 4, o si el promedio de los valores positivos es mayor que 6. 226. Dada una serie de M pares (color ‘R’ / ‘N’, número) correspondientes a los tiros de una ruleta, informar: • Cuántas veces salió el cero. • Cuántas veces seguidas llegó a repetirse el color negro. • El máximo de repeticiones consecutivas de un número, y dicho número. • El número anterior al último cero. • El mayor número de veces seguidas que tras el rojo salió negro. • El mayor número de veces seguidas que no se dio la segunda docena. 227. El gobierno de la Ciudad de Buenos Aires realiza una encuesta en casas de familia. De cada familia encuestada se conoce: domicilio, tipo de vivienda (‘C’: casa, ‘D’: departamento) y cantidad de integrantes. De cada integrante de la familia se conoce: nombre y apellido, edad, sexo (‘F’, ‘M’), nivel de estudios alcanzados (‘N’: no posee, ‘P’: primario, ‘S’: secundario, ‘U’: universitario), y un indicador (‘I’: Incompleto, ‘C’: Completo) referente al ítem anterior. Se identifica el fin de ingreso de datos con un cero como cantidad de integrantes. Informar: • La cantidad de encuestados que han completado los estudios primarios. • El porcentaje de analfabetismo en la ciudad (se consideran analfabetos a los mayores de 10 años que no poseen estudios). • El domicilio de la familia con mayor cantidad de integrantes que viven en un departamento. • La edad promedio de todos los habitantes de la ciudad. • La mayor edad promedio de las familias. • La cantidad de encuestados con estudios secundarios incompletos. • El porcentaje de encuestados de sexo femenino con estudios terciarios completos. 228. Una compañía aérea solicita un programa que imprima información sobre los N vuelos realizados en el mes. Para ello cuenta con la siguiente información de cada vuelo realizado: número, destino, y cantidad de asientos. Y de cada pasajero: número de pasaporte e importe abonado por el pasaje. La información de cada vuelo finaliza con número de pasaporte igual a 0. El programa debe: • Emitir el siguiente listado Número de Vuelo: 999 Destino: XXXXXX Número de Pasaporte Importe $ XXXXXXXXXXX 99999999 XXXXXXXXXXX 99999999 XXXXXXXXXXX 99999999 Total recaudado: XXXXXXXXXX % Asientos libres: XXXXXXXXXX % Asientos ocupados: XXXXXXXXX • Informar: o El total recaudado por la compañía en el mes. o La mayor cantidad de veces seguidas que se despacharon vuelos completos. Página 8 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 o El número de vuelo con mayor recaudación. 229. Una bodega quiere lanzar una oferta para terminar con el stock de B cajas de vino blanco y T cajas de vino tinto. Desea armar la mayor cantidad posible de ofertas, de tal manera que todas tengan la misma cantidad de cajas de vino blanco y también de vino tinto. Informar cuántas ofertas podrá armar como máximo, así como la cantidad de cajas de vino blanco y la cantidad de cajas de vino tinto que tendrá cada oferta. El programa debe aplicar una función tal que dados dos valores enteros positivos X e Y, devuelva el máximo común divisor. Efectuar el seguimiento del programa para los siguientes datos: • B = 48 T = 64 • B = 42 T = 63 Página 9 de 10 Algoritmos y estructuras de datos - Guía de ejercicios N2 v1.3 Referencias La presente guía se compone de ejercitación cuya autoría corresponde a: • Material extraído de documentos generados por Proyecto de Investigación COVIE-FRBAUTN • Marcelo González • Ariel Glikman Página 10 de 10