Ejercicios 1) Supongamos las siguientes declaraciones de un

Anuncio
Introducción a los computadores
Ejercicios de Subprogramas
Ejercicios
1) Supongamos las siguientes declaraciones de un programa principal:
VAR
R x,y
Z m
C c
Y sea un subalgoritmo con la siguiente cabecera:
ALGORITMO Prueba(E Z a,b; ES R c,d; ES C e)
Averigua cuáles de las siguientes llamadas a Prueba desde el programa principal son incorrectas y
cuál es la razón:
a)
b)
c)
d)
e)
f)
g)
h)
i)
Prueba(m+3,10,x,y,c)
Prueba(30,10,m,x,c)
Prueba(m,19,x,y)
Prueba(m,m*m,y,x,c)
Prueba(35,m*10,x,c,y)
Prueba(m,10,35.0,y,'E')
Prueba(m,3.5,x,y,c)
Prueba(30,10,x,x+y,c)
Prueba(30,10,c,d,e)
2) Diseñar una función lógica que nos diga si un número es impar.
3) Diseña una función que devuelva un número combinatorio de forma modular. Después diséñala
de forma más eficiente sacrificando la modularidad.
4) Dado que no es aconsejable utilizar la igualdad entre números reales por ser dependiente de la
precisión, diseñar una función que devuelva el valor VERDADERO cuando sus dos argumentos
reales son iguales para una tolerancia dada, y FALSO cuando no lo sean. Utilizar para ello la
siguiente especificación:
ALGORITMO R IgualesR (E R v1, v2, tolerancia)
5) Dado el algoritmo adjunto de este ejercicio, elimina las dos sentencias erróneas que tiene, una en
el cuerpo principal y otra en A1, y muestra lo que saldría por pantalla al ejecutar dicho algoritmo si
por teclado se le introducen los números 5, 3, 2, 2.
ALGORITMO Ambitos
VAR
Z a,b,c,x,y
ALGORITMO A1(ES Z x; E Z y)
INICIO
a = A2(y)
x = x + y
y = x * y
Escribir(a,b,c,x,y)
FIN A1
ALGORITMO Z A2(E Z x)
INICIO
DEVOLVER x * x
FIN A2
23/10/2003 Lenguajes y Ciencias de la Computación
1º Ingeniería Técnica de Telecomunicación
1
Introducción a los computadores
Ejercicios de Subprogramas
ALGORITMO A3(ES Z b)
VARIABLES
Z a
INICIO
b = x + c
a = A2(c)
Escribir(a,b,c,x,y)
FIN A3
INICIO
Leer(a,b,c,x)
A1(b,a)
y = x
A3(A2(a))
A3(c)
FIN Ambitos
6) a) Dado el algoritmo adjunto, si ch=‘X’ y
numero=5, ¿cuál sería el efecto de ejecutar cada
una de las siguientes llamadas al procedimiento?
Escr(ch,4*numero-12) Escr(ch,6)
Escr(5,numero)
Escr(‘/’,numero)
Escr(‘.’,6)
Escr(‘p’,-10)
ALGORITMO Escr(E C ch; E Z long)
INICIO
MIENTRAS long>0 HACER
Escribir(ch)
long = long - 1
FINMIENTRAS
FIN Escr
b) Escribe llamadas a Escr para que produzcan las siguientes salidas: 1) 35 guiones sucesivos; 2)
6 veces tantos blancos como el valor de numero; y 3) el valor actual de ch 14 veces.
7) Dadas las declaraciones adjuntas de un determinado algoritmo, ¿ Cuáles de las siguientes
llamadas a subalgoritmos en su cuerpo son válidas?
a) SI Uno(a,b) ENTONCES ...
b) Dos(a,b+3)
c) si = Uno(c,5)
d) si = Dos(c,5)
e) Dos(a,Tres(a))
f) Dos(Tres(b),c)
g) SI Tres(a) ENTONCES ...
h) b = Tres(Dos(a,5))
i) Dos(4,c)
VAR
N a, b, c
B si
ALGORITMO B Uno(E N x, y)
...
ALGORITMO Dos(ES N x;E N y)
...
ALGORITMO N Tres(E N x)
...
8) Diseña un subprograma que tome como entrada los coeficientes de una ecuación de segundo
grado y dé como salida las dos raíces reales de dicha ecuación. En un argumento de salida adicional
indicará cuándo las raíces son complejas, en cuyo caso no se calcularán las raíces. Suponer
predefinida la función ALGORITMO R Sqrt(R x), que devuelve la raíz cuadrada (SQuare RooT) de
un número real x.
9) Escribe una función que tome 3 parámetros: dos de tipo natural y uno de tipo enumerado. La
función deberá sumar, restar, multiplicar o dividir los valores de los dos primeros parámetros
dependiendo del código indicado en el tercer parámetro, y devolver el resultado.
23/10/2003 Lenguajes y Ciencias de la Computación
1º Ingeniería Técnica de Telecomunicación
2
Introducción a los computadores
Ejercicios de Subprogramas
10) Diseña un subprograma que, a partir de tres datos representando una fecha, por ejemplo, día,
mes y año, compruebe si constituyen una fecha válida del siglo 20. Para ello, se tendrá en cuenta
que los meses de Abril, Junio, Septiembre y Noviembre tienen 30 días; todos los demás meses,
exceptuando Febrero, tienen 31 días. Febrero tiene 29 días si el año es bisiesto y 28 días si el año es
no bisiesto.
Por ejemplo:
Día Mes Año Salida
23
11
1948 válido
31
11
1990 inválido
0
11
1990 inválido
1
13
1991 inválido
29
2
1991 inválido
25
12
1890 inválido
Nota: identificar los subproblemas del
problema a ser resuelto, y resolver cada uno de
ellos mediante un subalgoritmo separado.
11) Diseña un subprograma que muestre el calendario para un mes en el siguiente formato:
Lunes
Martes
Miércoles Jueves
Viernes
Sábado
2
9
16
23
30
3
10
17
24
4
11
18
25
6
13
20
27
7
14
21
28
5
12
19
26
Domingo
1
8
15
22
29
Los datos para el subprograma serán el número de días en el mes y el día de la semana en la que
comienza ese mes. En el ejemplo mostrado en la figura, habría que pasarle los siguientes datos de
entrada: Mostrar_Calendario (30, Domingo)
12) Diseña un programa que lea como datos de entrada una fecha dada por el mes y el año, y
muestre el calendario para el mes en el formato del ejercicio 12.
Este problema se divide en los siguientes subproblemas:
1. Leer los valores para mes y año, realizando una validación de dichos datos.
2. Averiguar el día de la semana en el que comienza dicho mes.
3. Averiguar cuántos días tiene dicho mes.
4. Mostrar el calendario.
Nota: Tener en cuenta que:
El subproblema 3 forma parte del ejercicio 10 de esta relación.
El subproblema 4 es planteado en el ejercicio 11 de esta relación.
dia_semana=(700 +(26*a –2) DIV 10 + dia + b + b DIV 4 + c DIV 4 – 2*c) MOD 7
donde a, b, c vienen dadas en la siguiente tabla:
SI mes<=2
SI mes>= 3
a= mes + 10
a= mes – 2
b= (año –1 ) MOD 100
b = año MOD 100
c= (año –1) DIV 100
c= año DIV 100
23/10/2003 Lenguajes y Ciencias de la Computación
1º Ingeniería Técnica de Telecomunicación
3
Descargar