Ejercicios algorítmica,descomposición de problemas: procedimientos por Alicia Beatriz Paur Este documento adapta ejercitación de la Guía de Trabajos Prácticos de la asignatura Algorítmica y Programación I, carrera: Licenciatura en Sistemas y Analista Programador Universitario-Facultad de Ingeniería (UNPSJB, sede Trelew) con la finalidad de generar objetos de aprendizaje (OA) de menor granularidad y mayor modularidad tendientes a aumentar su reusabilidad en diferentes contextos. La guía de trabajos prácticos de Algorítmica y Programación I ha sido desarrollada por los docentes de esa cátedra entre los que se incluye la autora de esta adaptación. El propósito de este OA es practicar el concepto de descomposición de problemas, especialmente los procedimientos, su definición, especificación de pre y poscondiciones, clasificación de parámetros (E, S, E/S) y también la introducción del concepto de recursividad con procedimientos. Reconocimiento entre procedimientos y funciones 1- Identifica cuáles de las siguientes operaciones pueden ser resueltas con funciones y cuáles deben ser resueltas con procedimientos. Justifica tu respuesta. Escribe la cabecera completa de los subalgoritmos y especifica: precondiciones, postcondiciones y clasificación de parámetros (entrada, entrada-salida o salida). a) b) c) d) e) f) g) h) i) j) k) l) Devolver la menor de dos fechas. Intercambiar los valores de dos variables enteras. Obtener un valor entero “n” que pertenezca a un intervalo (n1 <= n <= n2). Implementar una operación matemática (como sumar, multiplicar, potencia, raíz, etc.). Ordenar de menor a mayor 5 números. Calcular las raíces reales o complejas de una ecuación cuadrática. Obtener una fecha. Hallar el promedio de una lista de enteros. Dibujar un cuadrado a partir de las coordenadas del vértice superior izquierdo y la medida de su lado. Contar la cantidad de números entre un rango de dos números que cumplen una cierta condición. Reemplazar las vocales por ‘+’ en un texto. Determinar si 5 números están ordenados de menor a mayor. ¿Son correctos? 2- Identifica si los siguientes subalgoritmos son correctos; en caso de no serlo explica el error: b) Función promedio (E n1, n2: entero) a) Procedimiento promedio (E n1, n2: entero) : real (*Muestra el promedio de dos Números *) Var prom: real Inicio prom ← (n1 + n2) / 2 mostrar (prom) Fin (*Devuelve el promedio de dos Números *) Var prom: real Inicio prom← (n1 + n2) / 2 Fin d) Procedimiento intercambio (E/S n1, n2: entero) c) Procedimiento aMayusculas (E/S s: cadena) (*intercambia los valores de n1 y n2 *) Var aux: entero Inicio aux ← n1 n1 ← n2 n2 ← aux Fin (*Devuelve la cadena s en mayúsculas *) Var i: entero Inicio desde i ←1 hasta long(s) hacer s[i] ← mayúscula(s[i]) finDesde Fin 3- Analiza cuáles de las llamadas detalladas a continuación son correctas en base a las declaraciones dadas. Justifica la respuesta. Var t: caracter n, m: entero x: real a) b) c) d) e) f) g) h) i) proc1(7, n, t, t); proc1(2.4, 5+8, t); proc1(7, 5, 'c'); n ← func1(m); func1(n); n ← func2(x, 3); x←func2(x, 3); n ← func2(m, x); proc1(7, x, t); Procedimiento proc1(E a, b: entero; E/S c: caracter) Inicio .... Fin ___________________________________________ Función func1(E a: entero):real Inicio .... Fin ___________________________________________ Función func2( E a: real; E b: entero) :entero Inicio .... Fin ¿Qué hacen? 4- Determina qué hace cada subproblema y evalúa si los parámetros usados son correctos (con respecto a la invocación correspondiente a cada caso). Si no lo son, explica por qué y reescribe correctamente el encabezado. Observación: Es muy importante saber diferenciar parámetros de entrada, entrada-salida y salida; también en qué casos debe usarse cada uno. a) Programa programa1 Var a, b: entero Inicio a ←10 b ←20 intercambio(a,b) mostrar (a, b) Fin Procedimiento intercambio (E x,y: entero) Var aux: entero Inicio aux ← x x←y y ← aux Fin b) Programa programa2 Inicio mostrar (potencia(2,3)) Fin Función potencia (E base: entero, E exponente: entero): real Var resultado: entero i: entero Inicio resultado ← 1 Desde i ← 1 hasta abs(exponente) hacer resultado ← resultado * base Fin Desde Si (exponente < 0 ) entonces potencia ← 1 / resultado Sino potencia ← resultado Fin Si Fin 5- Realiza una traza del siguiente programa.¿A qué conclusiones es posible arribar a partir de los valores finales de a y b? Programa test Var a, b: entero Inicio // Programa Principal a ← 10 b ← 20 ensayo(a,b) mostrar(a, b) Fin Procedimiento ensayo(E x: entero, E/S y: entero) Inicio x ← x + 100 y ← y + 100 Fin Desarrollo de procedimientos 6- Escribe los procedimientos que permitan: a) Dado un dígito d, imprimir por pantalla un renglón como el siguiente: “ 1 2 3 ..... d ..... 3 2 1 ” Ej.: para d =5 debe imprimir 1 2 3 4 5 4 3 2 1 b) Obtener de la entrada de datos una fecha válida. Nombre sugerido: obtenerFechaValida. c) Dado un texto, reemplazar los caracteres que representan dígitos por “*”. ¿Cantidad de parámetros? ¿Tipo? d) Dado un texto, invertir su contenido, de forma tal que el primer carácter ocupa el último lugar y viceversa. 7- Utiliza adecuadamente las funciones y procedimientos ya desarrollados para: a) Hacer un algoritmo que por cada frase ingresada por el usuario reemplace todos los espacios por asteriscos, invierta la frase y la muestre. El proceso se repite mientras el usuario lo desee. b) Desarrollar un algoritmo que reciba fechas (valores numéricos que representan el día, mes y año) y las devuelva como texto. Ej.: Entrada: día=12; mes=2, año=1980. Salida: "12 de febrero de 1980". Validar los datos de entrada. Procedimientos recursivos 8- Escribe un procedimiento recursivo que muestre por pantalla un triángulo de Pascal con un número de filas recibido por parámetro. El triángulo de Pascal es un triángulo formado por números enteros que cumplen la siguiente condición: Cada fila del triángulo comienza y termina con un 1 y cada uno de los números siguientes se obtienen sumando los dos números que están justo arriba en la fila anterior. En el siguiente ejemplo se puede ver la forma del triángulo de Pascal de 8 filas. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 9- La siguiente serie gráfica representa los triángulos de Sierpinski de orden 0, 1, 2 y 3 Orden 0 Orden 1 Orden 2 Orden 3 Todos los triángulos son equiláteros y el tamaño del lado de cada triángulo que surge en el nuevo nivel es la mitad del anterior y sus vértices coinciden con los puntos medios de los lados del padre. a. Analiza la recursividad del patrón, indicando el caso base. b. Grafica el triángulo de o 4.