| |
Programación I
Ingeniería Técnica Informática
Ejercicios de los Temas 8 y 9
Subprogramas
- Escribir una función en Pascal para calcular A elevado a B, siendo A un número
real cualquiera y B un valor entero positivo o nulo.
- Elaborar una función en Pascal que dado un carácter nos devuelva su mayúscula
correspondiente.
- Escribir una función booleana en Pascal que nos diga si un valor entero
es o no cuadrado perfecto.
- Elaborar una función en Pascal que calcule el número de días de un mes
de un año cualquiera.
- Dado el tipo
type resultado = (menor, igual, mayor) . Elaborar
una función Pascal del tipo resultado que tome dos valores i, j y nos
compare i con j.
- Escribir la función Resto que nos calcule el resto de dividir su primer
parámetro por el segundo (es decir, lo mismo que hace el operador
predefinido
mod ), suponiendo que no disponemos de los
operadores div , mod y / (división
real). Tanto los parámetros como el resultado de la función son números
enteros.
- Elaborar una función booleana Pascal que dado un número entero nos diga
si es o no primo.
- Dado un número entero positivo
a se define la función de
Euler relativa a a como el número de enteros positivos
inferiores a a que son primos con a . Por ejemplo,
la función de Euler de 2 es 1, la de 4 es 2, etc. Elabore una función en
Pascal que implemente la función de Euler relativa a cualquier número
entero positivo.
- Elaborar un programa que lea un número n por teclado y nos diga la
distancia entre cada par de primos contiguos menores que n. Por ejemplo si
el número introducido es 15 los pares de primos menores que él son: 1-2,
2-3, 3-5, 5-7, 7-11, 11-13 de modo que el programa debería responder: 1, 1,
2, 2, 4, 2 .
- Escribir un procedimiento CambioARectangulares que convierta sus dos parámetros
reales de forma polar a forma rectangular.
- Escribir un procedimiento CambioAPolares que convierta sus dos parámetros
de tipo real de forma rectangular a forma polar.
- Escribir un procedimiento que descomponga y escriba los factores primos de
cualquier número entero.
- (Concurso de la ACM, 1.999) Dado un número entero, N, si la suma de sus
divisores (sin contar a si mismo) es igual a N se dice que ese número es
perfecto. Si la suma es inferior, se dice que es deficiente, y si es
superior se dice que es abundante. Por ejemplo:
- 6 tiene como divisores 1,2,3: Su suma es 6, por lo tanto es perfecto.
- 8 tiene como divisores 1,2,4: Su suma es 7, por lo tanto es
deficiente.
- 24 tiene como divisores 1,2,3,4,6,8,12: Su suma es 36, por lo tanto es
abundante.
Escribir un subprograma que reciba un número entero como parámetro y
devuelva un valor que lo clasifique como perfecto, deficiente o abundante.
- (Examen curso 86/87) Un fumador empedernido se encuentra una noche de
estudio sin cigarrillos, pero con una buena cantidad de colillas. Descubre
que es capaz de liarse un cigarrillo completo con cada siete colillas. Diseñar
un procedimiento en Pascal que calcule, a partir de un número dado de
colillas, el número de cigarrillos que podrá aún fumar a base de liarlas
y el número de colillas restantes. Explíquese con qué parámetros
actuales se llamaría al procedimiento. Ejemplo: Con 13 colillas fumará dos
cigarrillos y sobrará una colilla.
- Escribir una función en Pascal para obtener la edad (en años) de una
persona a partir de su fecha de nacimiento y del día de hoy.
- (Examen curso 86/87) ¿Cuál es la salida del siguiente programa? ¿Que
errores o acciones no recomendables encuentras en él?
Program mezcolanza(output);
var
a, b, c : integer;
Procedure mezcla(var y: integer; z: integer);
var x : integer;
begin
x := y; y := z; z := c; c := x
end; (* mezcla *)
Procedure lanza(a: integer; var b: integer);
var x : integer;
begin
x := c; c := b; b := a; a := x
end; (* lanza *)
begin (* programa principal *)
a := 1; b := 2; c := 3; writeln(output, a, b, c);
mezcla(a, b);
writeln(output,
a, b, c);
lanza(a, b);
writeln(output,
a, b, c);
a := 1; b := 2; c := 3; writeln(output, a, b, c);
mezcla(a, b+1);
writeln(output,
a, b, c);
lanza(a-b, b);
writeln(output,
a, b, c);
end. (* programa principal *)
- (Examen curso 87/88) ¿Cuales son los resultados que se obtienen al
ejecutar el siguiente programa? ¿Que errores o acciones no recomendables
encuentras en él?
Program Examen(output);
var a, b, c : real;
Procedure uno(var a: real; x: real; var y: real);
var b, d : real;
begin (* uno *)
b := x+y-a; d
:= a*y-a*b; c := a*y-d; x
:= a*c-b;
a := b+d+x-y; y := a+b+c+d+x+y
end; (* uno *)
begin (* principal *)
a := 1; b := 2; c := 3; uno(a,b,c);
writeln(output,a,b,c); uno(b,c,a); writeln(output,a,b,c);
end.
- (Examen curso 87/88) ¿Qué salidas se obtienen cuando se ejecuta el
siguiente programa ? ¿Que errores o acciones no recomendables encuentras en
él?
program ejemplo (input, output);
var a, b, c, d : integer;
procedure cambia (var a, g : integer; y : integer);
var b, c : integer;
begin (* cambia *)
b:= a+g-y; g:=
b+d;
c:= 1;
a:=
a+b-c+d; y:= c+g-a;
end; (* cambia *)
begin (* ejemplo *)
a:=1; b:= 2; c:=3; d:=4;
cambia(b, c, d); writeln(output,a:4,b:4,c:4,d:4);
cambia(b, a, c); writeln(output,a:4,b:4,c:4,d:4);
end. (* ejemplo *)
- (Examen curso 92/93) El programa
a contiene los
procedimientos b y e , a su vez el procedimiento b
contiene a los procedimientos c y d . Las
siguientes variables se declaran en las secciones de declaración de
variables:
- Variables globales: k, l, m, n.
- Variables locales de
b : k, l, o, p, r.
- Variables locales de
c : k, p, s.
- Variables locales de
d : m, r, s, t.
- Variables locales de
e : n, r.
Suponemos que los procedimientos no tienen parámetros. Contestar,
justificando brevemente la respuesta, a las siguientes preguntas:
- (Primer Parcial curso 93/94) En nuestra instalación informática tenemos
3 discos:
Nombre |
Capacidad |
Ocupación |
VSAM01 |
1770 Cil. |
1593 Cil. |
VSAM02 |
2220 Cil. |
1332 Cil. |
VSAM03 |
2340 Cil. |
1100 Cil. |
Sabiendo que 15 pistas equivalen a un cilindro, elaborar un programa que
vaya leyendo el número de referencia de cada fichero (un entero positivo) y
el espacio que ocupa (en pistas), y nos determine el menos ocupado de los
discos en que podemos almacenarlo, actualizando sus datos de ocupación.
Cuando el número de referencia sea 0, el programa deberá darnos la
cantidad de cilindros ocupados y el tanto por ciento de ocupación para cada
uno de los tres discos, continuando con el proceso. Si el número de
referencia es negativo, el programa terminará su ejecución.
|