Professional Documents
Culture Documents
Ejercicios: Tema 3
Problema 3.1.
Disear un programa que calcule la tangente de un ngulo, introducido por teclado en grados y la muestre por
la pantalla en notacin decimal, con siete caracteres y dos decimales.
NOTA: Esta versin de tangente de un ngulo en grados utiliza procedimientos, funciones as como paso de
parmetros por valor.
program CalculaTangenteGrados1 (input,otutput); { El programa calcula la tangente de un ngulo,
introducido por teclado en grados y la muestra por la pantalla en notacin decimal, con siete caracteres y dos
decimales
1. Lee los grados
2. Calcula la tangente
3. La expresa por pantalla con el formato que se pide }
{ Utiliza funciones y procedimientos con parmetros por valor }
{ Precondicion: [angGrad, tan] " R " input=angGrad }
{ variables globales }
var
angGra, {ngulo en grados }
tan: real; {su tangente }
procedure EscCon2Dec(valor:real);
{ Escribe valor en formato decimal con 7 caracteres y con dos decimales }
begin {comienza el procedimiento}
write('El valor de la tangente es: ');
writeln(valor:7:2)
{postcondicin: output =[valor] }
end; {fin de }
function TanEnGrados(valor:real): real;
Esta versin de tangente de un ngulo en grados utiliza procedimientos y funciones, paso de parmetros por
valor y por referencia. Es conveniente que se compare con la versin anterior y siguientes.
program CalculaTangenteGrados2 (input,otutput);
{ Este programa calcula la tangente de un ngulo, introducido por teclado en grados y la muestra por la
pantalla en notacin
decimal, con siete caracteres y dos decimales
1. Lee los grados
2. Calcula la tangente
3. La expresa por pantalla con el formato que se }
{ Utiliza funciones y procedimientos con parmetros por valor y por referencia }
{Precondicin: angGrad, tan " }
var { variables globales }
angGra, {ngulo en grados }
tan: real; {su tangente }
procedure LeeVal(var valor:real);
{ recoge el valor del ngulo por teclado y asigna el valor del ngulo a la variable local valor
NOTA: Esto puede dar lugar a efectos laterales }
begin {comienzo de LeeVal }
write ('Escribe el ngulo en grados ( ngulo<>90+k*180): ');
readln(valor) {postcondicin: input = valor }end; {fin de LeeVal }
procedure EscCon2Dec(valor:real);
{ Escribe valor en formato decimal con 7 caracteres y con dos decimales } begin {comienza }
write('El valor de la tangente es: ');
writeln(valor:7:2)
{postcondicin: output = valor }
end; {fin de EscCon2Dec }
function TanEnGrados(valor:real): real;
end;
procedure convertir(tempFahr:real; var tempCels:real);
{ El procedimiento convierte la temperatura de F a C, y devuelve por referencia la temperatura en C
tempFahr es de entrada, no cambia de valor,
tempCels si cambiar el valor cuando sale se define por referencia }
{Precondicin: tempFahr " 459.69 (0 absoluto) aunque no es obligatorio, parece que tiene ms sentido
postcondicin: tempCels = (5/9) * (tempFahr 32.0) }
begin
tempCels:=(5/9) * (tempFahr 32.0)
end;
procedure mostrar(tempFahr,tempCels:real);
begin
clrscr;
writeln ('La temperatura en Fahrenheit es: ',tempFahr:15:2, 'F');
writeln ('La temperatura en Celsius es: ',tempCels:15:2, 'C')
{ postcondicin: output= [tempCels, tempFahr] }
end;
begin { Programa Principal}
{ Inicializacin de variables }
F:=0;
C:=0;
{ Pedir datos por teclado }
pedir (F);
{ OJO Modifica el valor de la variable global puede producir efecto lateral }
{ Conversin }
convertir(F,C);
11
begin
tempCels:=(5/9) * (tempFahr 32.0);
end;
procedure mostrar(tempFahr,tempCels:real);
begin
clrscr;
writeln ('La temperatura en Fahrenjait es: ',tempFahr:15:2, 'F');
writeln ('La temperatura en Celsius es: ',tempCels:15:2, 'C')
end;
begin { Programa Principal}
{ Inicializacin de variables }
F:=0;
C:=0;
{ Pedir datos por teclado }
pedir (F);
{ Conversin }
convertir(F,C);
{ Mostrar datos por pantalla }
mostrar(F,C)
end.
Problema 3.6.
Disear un programa que convierta F, incluidos por teclado en C, y muestre el valor introducido y el
resultado por pantalla en notacin decimal, con quince caracteres y dos decimales.
Esta versin usa funcin y variables globales en procedimientos y funciones
program FahrenheitACelsius4 (input,output);
{FahrenheitACelsius Versin 4}
{ Programa que convierte grados Fahrenheit en Celsius
12
13
begin
clrscr;
writeln ('La temperatura en Fahrenheit es: ':45,F:15:2, ' F');
writeln ('La temperatura en Celsius es: ':45,C:15:2, ' C');
end;
begin { Programa Principal}
{ Inicializacin de variables }
F:=0;
C:=0;
{ Pedir datos por teclado }
pedir;
{ Conversin }
c:=convertir;
{ Mostrar datos por pantalla }
mostrar
{ Este programa no respeta el principio de autonoma de subprogramas. Los subprogramas dependen de las
variables globales. }
end.
Problema 3.7.
Disear un programa que convierta F, incluidos por teclado en C, y muestre el valor introducido y el
resultado por pantalla en notacin decimal, con quince caracteres y dos decimales.
Esta versin usa funciones y procedimientos, evitando los parmetros por referencia, e independizando los
procedimientos y funciones.
Se consigue tambin que cada procedimiento y funcin tenga nicamente los parmetros que necesita y no
ms, ni menos. Estudia esta versin y compralas con las otras.
program FahrenheitACelsius5 (input,output);
{FahrenheitACelsius Versin5}
{ Programa que convierte grados Fahrenheit en Celsius
14
15
16
17
18
num:=LeeNum;
{Encripta el Nmero}
car:=Encriptado(num);
{Muestra entrada y salida}
MosEntSal(num,car);
end.
Problema 3.9.
Disear un subprograma documentado, que admita dos valores reales y los devuelva cambiados. Utiliza el
subprograma en un programa,tambin documentado, que solicite los dos reales por teclado y los presente en
pantalla una vez intercambiados.
program Intercambio (input,output);
{El programa intercambia el valor de dos variables
reales que entran previamente por teclado, y
muestra en pantalla los valores de entrada intercambiados
1. Entrada de datos por teclado
2. Intercambio de valores
3. Salida por pantalla del resultado
Ahora utilizamos subprogramacin }
uses crt; {en la Librera Standard de Pascal}
var {variables globales}
x,y:real;
procedure EntDatos (var x,y:real);
{Precondicin: [x,y] pertenecen a R}
{Postcondicion: input=[m,n] y x=m e y=n}
begin
write('Escribe el valor real de X: ');
readln (x);
19
20
begin
{Resultados por Pantalla}
writeln (' Los valores ahora valen: ');
writeln (' X= ',x:7:2);
writeln (' Y= ',y:7:2)
readln;
end; {de Mostrar}
begin {Programa Principal}
{Slo llamadas a subprogramas}
ClrScr; {Borra Pantalla}
EntDatos(x,y);
Confirma (x,y);
Intercambia(x,y);
Mostrar(x,y)
end. {Del Programa Principal}
Problema 3.10.
Disear un programa utilizando subprogramacion, y sin utilizar estructuras de control, que acepte tres valores
enteros y devuelva el mayor de ellos. Documenta el programa incluyendo el propsito de ste y de cada
subprograma. Incluye igualmente las precondiciones y postcondiciones de cada subprograma.
program Maximo3 (input,output);
{Calcula el mximo de 3 enteros introducidos por teclado
1. Recoge los datos del teclado
2. Calcula el mximo de los tres
3. Muestra por pantalla el mximo }
var
N1,N2,N3,
Maximo:integer;
21
22
23