Ejercicios algorítmica,descomposición de problemas

Anuncio
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.
Descargar