Problemas resueltos con Pascal

Anuncio
Metodología y Tecnología la Programación
Ejercicios: Tema 2
Problema 2.1
Diseñar un programa que permita dibujar en la pantalla el patrón siguiente:
−−
|
|
−−
|
|
−−
Solución
program EseNoModular (output);
{ El programa dibuja la letra S según el patrón solicitado,
No necesita entrada de datos por lo que no se necesita input,
No es modular }
{ Programa Principal}begin {Patrón de la horizontal} writeln(' −','−')
{Patrón vertical izquierdo} writeln('|'); writeln('|');
{Patrón de la horizontal}
writeln(' −','−')
{Patrón vertical derecho}
writeln(' |');
writeln('|':3) {Una alternativa}
end.
Problema 2.2
1
Diseñar un programa que permita dibujar en la pantalla el patrón siguiente:
−−
|
|
−−
|
|
−−
Solución
program ENoModular (output);
{ El programa dibuja la letra E según el patrón solicitado,
No necesita entrada de datos por lo que no se necesita input,
No es modular }
{ Programa Principal}begin {Patrón de la horizontal}
writeln(' −','−')
{Patrón vertical izquierdo}
writeln('|');
writeln('|');
{Patrón de la horizontal}
writeln(' −','−')
{Patrón vertical izquierdo}
writeln('|');
writeln('|');
{Patrón de la horizontal} writeln(' −','−')
end.
Problema 2.3
2
Diseñar un programa que admita por teclado los catetos de un triángulo rectángulo, calcule su hipotenusa, y la
muestre por pantalla.
Solución
program hipotenusa (input, output);{ Este programa calcula la hipotenusa de un triángulo rectángulo. Para
ello:
1.− Pide que se introduzcan por teclado los valores de los catetos
2.− Halla la hipotenusa utilizando el teorema de pitágoras
3.− Muestra por pantalla el resultado que ha calculado }
{Precondición: [cat1,cat2] " R }
var
cat1,cat2, {variables que acogen las medidas de los catetos}
sumCuadrados, {variable que acoge la suma de los cuadrados }
hipo :real; {variable que acoge el valor de la hipotenusa }
begin { comienza el programa hipotenusa}
{Precondición: input=[cat1,cat2]}
{Obtención de datos} write('Introduce la longitud del primer cateto: '); readln (cat1); write('Introduce la
longitud del segundo cateto: '); readln (cat2);
{Confirmación de los valores}
writeln ('Cat1 = ',cat1:8:2, ' y Cat2 = ',cat2:8:2);
writeln ('Pulsa Enter para seguir');
readln; {Permite revisar en la pantalla los valores escritos}
{Cálculo de la hipotenusa}
{Invariante:hipo=(cat12 + cat22)1/2}
sumCuadrados:=sqr(cat1) + sqr(cat2);
hipo:=sqrt(sumCuadrados);
{Escritura de Resutados}
writeln(' −−−−−− RESULTADOS −−−−−−');
writeln('La hipotenusa es: ', hipo:8:2)
3
Postcondición:output=[hipo]}end. {del programa hipotenusa}
Problema 2.4
Diseñar un programa que admita por teclado un ángulo en grados, calcule su tangente y la muestre por
pantalla en notación decimal con siete caracteres y dos decimales.
Solución
program TangenteAnguloGrados (input,otutput);
{El programa calcula la tangente de un ángulo, introducido por teclado en grados y la muestra por la pantalla
en notación decimal, con siete caracteres y dos decimales}
{Versión 1: No utiliza subprogramas}
{1.− Lee los grados
2.− Calcula la tangente
3.− La expresa por pantalla con la precisión que se pide}
const Pi=3.1416;
{Precondición: [angGrad,tan] " R " input=angGrad }
var angGra, {ángulo en grados } angRad {ángulo en radianes}
tan: real; {su tangente }
{Precondición: angGra " 90 + k*180 }
begin {Comienzo del Programa TangenteAnguloGrados }
{ Lectura del valor de ángulo en grados. } write ('Escribe el ángulo en grados ( ángulo<>90+k*180): ');
readln(angGra);
{ Precondición: ángulo <> 90 + k*180 }{ Conversión de grados a radianes }{ Invariante: angRad = angGra
* pi / 180 }
angRad:=angGra * Pi / 180;
{ Cálculo de la tangente y asignación del valor a tan}
tan:= sin(angRad) / cos (angRad)
{Escribe valor en formato decimal con 7 caracteres y con dos decimales }
write('El valor de la tangente es: ');
writeln(tan:7:2)
4
{Postcondici¢n: Output = tan }
end. {Fin del programa TangenteAnguloGrados }
Problema 2.5
Diseñar un programa que admita por teclado un numero entero positivo, calcule su clave encriptada y la
muestre por pantalla. La fórmula de encriptación es la siguiente:
Clave Encriptada (N) = ASCII ( NE), donde NE = K * (1+N2) , K=23
Solución
program EncriptaCodigo (input, output);
{versión 1: No Utiliza subprogramas }
{ Este programa encripta un número entero positivo: Para ello
1.− Pide que se introduzca el número por teclado
2.− Calcula el encriptado del numero que se ha introducido. Para ello:
2.1 Aplica la fórmula NE = K * (1 + N2), donde K = 23
2.2 Encripta el rea. Para ello
2.2.1 Recoge el resultado NE
2.2.2 Devuelve el carácter ascii de la división entera de NE
y 256
3.− Muestra por pantalla el carácter resultante de la encriptación }
{ Precondiciones: n " Z+, input = [n]
Invariante: c=ascii( k *(1+sqr(n)) mod 256)
Postcondición output= [c]}
const
K=23;
NAscii=256;
var
num,
numEnc:integer;
5
claEnc:char;
begin { comienza el programa EncriptaCodigo}
{Obtención de datos:}
write('Introduce un número positivo: ');
readln (num);
{Cálculo del número encriptado}
numEnc:=(K*(1+sqr(num)));
{Cálculo del carácter encriptado}
carEnc:=char(numEnc mod NAscii);
{ Escritura de Resutados}
writeln(' −−−−−− RESULTADOS −−−−−−');
writeln('El número escrito es: ', num:8);
writeln('El carácter que lo encripta es:', carEnc:3)
end. {del programa EncriptaCodigo}
Tema 2: Elementos de Pascal
1
1
Metodología y Tecnología de la Programación
6
Descargar