Ejercicios Resueltos en Turbo Pascal

Anuncio
EJERCICIOS EN PASCAL
1.- Área de un triángulo (Entrada y salida estándar - Pascal)
1.- Escribir un programa (en Pascal) que:
1º) Pida por teclado la base (dato real) de un triángulo.
2º) Pida por teclado la altura (dato real) de un triángulo.
3º) Calcule el área del triángulo.
4º) Muestre por pantalla el resultado (dato real).
En pantalla:
PROGRAM Area_triangulo;
VAR Altura, Area, Base : Real;
BEGIN
ClrScr;
WRITE( 'Introduzca base: ' );
READLN( Base );
WRITE( 'Introduzca altura: ' );
READLN( Altura );
Area := Base * Altura / 2;
WRITE( 'El area del triangulo es: ', Area:0:2 );
END.
Una segunda solución es:
PROGRAM Area_triangulo;
USES Crt;
VAR Altura, Base : Real;
BEGIN
ClrScr;
WRITE( 'Introduzca base: ' );
READLN( Base );
WRITE( 'Introduzca altura: ' );
READLN( Altura );
WRITE('El area del triangulo es: ', Base * Altura / 2:0:2 );
END.
2.- Escribir un programa en Pascal 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. Precondición: angGra " 90 + k*180
PROGRAM Tangente;
CONST Pi=3.1416;
VAR angGra, angRad,tan: real;
BEGIN
WRITE ('Escribe el ángulo en grados ( ángulo<>90+k*180): ');
READLN(angGra);
angRad:=angGra * Pi / 180;
tan:= sin(angRad) / cos (angRad)
WRITE('El valor de la tangente es: ');
WRITEln(tan:7:2)
END.
1
3.- Cambio de signo (Alternativa simple - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado un número (dato real).
2º) Muestre por pantalla el número introducido, pero, cambiado de signo y, sólo en el caso de
que el número no sea mayor o igual que cero.
PROGRAM Cambio_de_signo;
USES Crt;
VAR Numero : Real;
BEGIN
ClrScr;
WRITE( 'Introduzca numero (real): ' );
READLN( Numero );
IF ( Numero < 0 ) then
WRITE( -Numero )
END.
4.- División entera (Entrada y salida estándar - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado dos números (datos enteros). (Divisor y Dividendo)
2º) Muestre por pantalla el resultado de realizar la división entera del primer número
introducido por el usuario entre el segundo, y el resto.
PROGRAM Division_entera;
USES Crt;
VAR Dividendo, Divisor, Cociente, Resto : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca dividendo (entero): ' );
READLN( Dividendo );
WRITE( 'Introduzca divisor (entero): ' );
READLN( Divisor );
Cociente := Dividendo div Divisor;
Resto := Dividendo mod Divisor;
WRITE(‘Dividendo, ' div ', Divisor, ' = ',
Cociente, ' ( Resto = ', Resto, ' )' );
END.
Una segunda solución es:
PROGRAM Division_entera;
USES Crt;
VAR Dividendo, Divisor : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca dividendo (entero): ' );
READLN( Dividendo );
WRITE( 'Introduzca divisor (entero): ' );
READLN( Divisor );
WRITE( ‘Dividendo, ' div ', Divisor, ' = ',
Dividendo div Divisor, ' ( Resto = ',
Dividendo mod Divisor, ' )' );
END.
2
5.- Escribir un programa que convierta un número de segundos en su equivalente en
minutos y segundos.
PROGRAM Convertir;
USES Crt;
VAR seg0,seg,min: Integer;
BEGIN
ClrScr;
WRITE('Introduzca los segundos: '); READLN(seg0);
WRITELN;
min := seg0 div 60;
seg := seg0 mod 60;
WRITE(seg0,' segundos son ',min,' minutos y ',seg,' segundos.');
END.
Una segunda solución es:
PROGRAM Convertir;
USES Crt;
VAR iniseg, segundos, minutos: integer;
BEGIN
ClrScr;
WRITE('Dime un número de segundos:');
READLN(iniseg);
minutos := iniseg div 60;
segundos := iniseg mod 60;
WRITELNn(iniseg,' segundos son ',minutos,' minutos y ',segundos,' segundos.');
READkey
END.
6.- Media aritmética (Alternativa simple - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado dos números (datos enteros). (Numero 1 y Numero 2)
2º) Muestre por pantalla la media aritmética de los números introducidos, pero, sólo en el
caso de que ambos números sean mayores que cero.
PROGRAM Media;
USES Crt;
VAR A, B : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( A );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( B );
IF ( A > 0 ) and ( B > 0 ) then
WRITE( ( A + B ) / 2 )
END.
3
7.- Escribir un programa en Pascal que calcule el importe de una factura sabiendo que
el IVA a aplicar es del 12% y que si el importe bruto de la factura es superior a 50.000
pts se debe realizar un descuento del 5%.
PROGRAM Impuesto;
USES CRT;
VAR i_bruto, i_neto, importe:REAL;
CONST IVA=0.12;
BEGIN
ClrScr;
WRITE ('Escriba el importe bruto: '); READLN (i_bruto);
WRITELN ('');
i_bruto:= i_bruto + (IVA * i_bruto);
IF i_bruto > 50000 THEN
BEGIN
i_neto:= i_bruto - (i_bruto * 0.05);
WRITE ('El importe neto con descuento del 5% es de: ',i_neto:5:2,' pts')
END
ELSE
BEGIN
i_neto:= i_bruto;
WRITE ('El importe bruto sin descuento es de: ',i_neto:5:2,' pts.');
END;
END.
Una segunda solución es:
PROGRAM Impuesto;
USES CRT;
VAR imp_bruto:REAL;
BEGIN
ClrScr;
WRITE('Importe bruto -> '); READLN(imp_bruto);
IF imp_bruto <= 50000 THEN
BEGIN
WRITE('Importe neto: ');
WRITELN(imp_bruto+(imp_bruto*0.12):9:2);
END
ELSE
BEGIN
WRITE('Importe neto -> ');
imp_bruto:=imp_bruto-(imp_bruto*0.05);
WRITELN(imp_bruto+(imp_bruto*0.12):9:2);
END;
END.
4
8.- Escribir un programa en Pascal que calcule el área y el volumen de un cilindro:
PROGRAM Area_cilindro;
USES CRT;
VAR radio, altura:REAL;
VAR area, volumen:REAL;
BEGIN
ClrScr;
radio:=3;
altura:=4;
area:= 2 * (3.1416 * sqr(radio)) + ((2 * 3.1416 * radio) * altura);
volumen:= (3.1416 * sqr(radio)) * altura;
WRITE ('EL AREA DEL CILINDRO ES: '); WRITELN (area:6:2);
WRITE ('EL VOLUMEN ES: '); WRITE (volumen:6:2);
END.
Una segunda solución es:
PROGRAM Area_cilindro;
USES CRT;
VAR radio, altura:REAL;
VAR area, volumen:REAL;
BEGIN
ClrScr;
WRITELN ('PARA CALCULAR EL AREA Y VOLUMEN DE UN CILINDRO: ');
WRITELN (' ');
WRITE ('ESCRIBA EL RADIO- '); READLN (radio);
WRITE ('ESCRIBA LA ALTURA- '); READLN (altura);
WRITELN (' ');
area:= 2 * (3.1416 * sqr(radio)) + ((2 * 3.1416 * radio) * altura);
volumen:= (3.1416 * sqr(radio)) * altura;
WRITE ('EL AREA DEL CILINDRO ES: '); WRITELN (area:6:2);
WRITE ('EL VOLUMEN ES: '); WRITE (volumen:6:2);
END.
9.- Cubos de números pares (Repetitiva para - Pascal) (FOR)
Escribir un programa (en Pascal) que muestre por pantalla los cinco primeros números
naturales pares elevados al cubo.
PROGRAM Cubos;
USES Crt;
VAR Numero, Resultado : Integer;
BEGIN
ClrScr;
for Numero := 1 to 5 do
BEGIN
Resultado := Numero * 2;
WRITE( Resultado * Resultado * Resultado, ' ' )
END
END.
5
10.- Escribir un programa en Pascal que lea desde teclado el importe bruto de una
factura y determine el importe neto según los siguientes criterios.
Importe bruto menor de 20.000 -> sin descuento
Importe bruto mayor de 20.000 -> 15% de descuento
PROGRAM Factura;
USES CRT;
VAR importe_bruto:REAL;
VAR descuento, total:REAL;
BEGIN
ClrScr;
WRITE ('Indique el importe de su factura para ver ');
WRITELN ('si le "descontamos" algo');
WRITELN ('');
READLN (importe_bruto);
WRITELN ('');
descuento:=importe_bruto * 0.15;
IF importe_bruto > 20000 THEN
WRITELN ('SE MERECE UN DESCUENTO DE: ',descuento:5:2, ' PTS');
total:=importe_bruto - descuento;
WRITELN ('El total es de la factura es de: ',total:5:2,' pts')
ELSE
WRITE ('CON ESE DINERO NO SE MERECE UN DESCUENTO')
END.
Una segunda solución es:
PROGRAM Factura;
USES CRT;
VAR imp_bru,imp_net:REAL;
BEGIN
ClrScr;
WRITE('Importe Bruto -> '); READLN(imp_bru);
IF imp_bru <= 20000 THEN
imp_net:=imp_bru
ELSE
imp_net:=imp_bru-(0.15*imp_bru);
WRITE('Importe a pagar: '); WRITE(imp_net:5:2)
END.
6
11.- Suma de dos números (Alternativa doble - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado dos números (datos enteros). (Numero 1 y Numero 2)
2º) Calcule la suma de los números introducidos por el usuario.
3º) Muestre por pantalla:
•
•
"LA SUMA SÍ ES MAYOR QUE CERO.", en el caso de que sí lo sea.
"LA SUMA NO ES MAYOR QUE CERO.", en el caso de que no lo sea.
PROGRAM Suma;
USES Crt;
VAR A, B, Suma : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( A );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( B );
Suma := A + B;
IF ( Suma > 0 ) then
WRITE( 'LA SUMA SI ES MAYOR QUE CERO.' )
ELSE
WRITE( 'LA SUMA NO ES MAYOR QUE CERO.' );
END.
Una segunda solución es:
PROGRAM Suma;
USES Crt;
VAR A, B : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( A );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( B );
IF ( A + B > 0 ) then
WRITE( 'LA SUMA SI ES MAYOR QUE CERO.' )
ELSE
WRITE( 'LA SUMA NO ES MAYOR QUE CERO.' );
END.
7
12.- Número intermedio (Alternativa doble - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado tres números (datos enteros): <numero1>, <numero2> y <numero3>.
2º) Muestre por pantalla:
• EL NÚMERO MAYOR ES:
PROGRAM Num_intermedio;
USES Crt;
VAR N1, N2, N3 : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( N1 );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( N2 );
WRITE( 'Introduzca tercer numero (entero): ' );
READLN( N3 );
IF ( N2 < N3 ) and ( N2 > N1 ) then
WRITE( N2, ' SI ES MENOR QUE ', N3, ' Y MAYOR QUE ', N1 )
ELSE
WRITE( N2, ' NO ES MENOR QUE ', N3, ' Y MAYOR QUE ', N1 );
END.
Una segunda solución es:
PROGRAM Num_intermedio;
USES Crt;
VAR N1, N2, N3 : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( N1 );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( N2 );
WRITE( 'Introduzca tercer numero (entero): ' );
READLN( N3 );
WRITE( N2 );
IF ( N2 < N3 ) and ( N2 > N1 ) then
WRITE( ' SI ' )
ELSE
WRITE( ' NO ' );
WRITE( 'ES MENOR QUE ', N3, ' Y MAYOR QUE ', N1 );
END.
8
13.- Suma o multiplicación de dos números (Anidamiento de alternativas - Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado dos números (datos enteros).
2º) Calcule la suma y multiplicación de ambos números.
3º) Muestre por pantalla:
•
"La suma es mayor.", en caso de que sea mayor que la multiplicación de ambos
números.
•
"La multiplicación es mayor.", en caso de que sea mayor que la suma de ambos
números.
•
"La suma y multiplicación son iguales.", en caso de que así sea.
PROGRAM Suma_multiplicacion;
USES Crt;
VAR A, B, Suma, Multiplicación : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( A );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( B );
Suma := A + B;
Multiplicacion := A * B;
IF ( Suma > Multiplicacion ) then
WRITE( 'LA SUMA ES MAYOR.' )
ELSE
{ Inicio del anidamiento }
IF ( Multiplicacion > Suma ) then
WRITE( 'LA MULTIPLICACION ES MAYOR.' )
ELSE
WRITE( 'LA SUMA Y MULTIPLICACION SON IGUALES.' );
{ Fin del anidamiento }
END.
Una segunda solución es:
PROGRAM Suma_multiplicacion;
USES Crt;
VAR A, B : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero (entero): ' );
READLN( A );
WRITE( 'Introduzca segundo numero (entero): ' );
READLN( B );
IF ( A + B > A * B ) then
WRITE( 'LA SUMA ES MAYOR.' )
ELSE
{ Inicio del anidamiento }
IF ( A * B > A + B ) then
WRITE( 'LA MULTIPLICACION ES MAYOR.' )
ELSE
WRITE( 'LA SUMA Y MULTIPLICACION SON IGUALES.' );
{ Fin del anidamiento }
END.
9
ESTRUCTURA WHILE
1.- Cantidad y suma de números enteros (Anidamiento de repetitivas y alternativas Pascal). (WHILE)
Escribir un programa (en Pascal) que:
1º) Pida por teclado un número (dato entero).
2º) Repita el paso 1º, mientras que, el número introducido sea distinto de cero.
En caso de ser cero MENSAJE: “EL NUMERO DEBE SER DIFERENTE DE CERO”)
3º) Muestre cuántos números mayores que cero han sido introducidos por el usuario, así
como, la suma de todos ellos.
PROGRAM Suma_de_enteros;
USES Crt;
VAR Numero, Contador, Suma : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca un numero entero: ' );
READLN( Numero );
Contador := 0;
Suma := 0;
while ( Numero <> 0 ) do
BEGIN
IF ( Numero > 0 ) then
BEGIN
Contador := Contador + 1;
Suma := Suma + Numero
END;
WRITE( 'Introduzca un numero entero: ' );
READLN( Numero )
END;
WRITELn( 'Ha introducido ', Contador,
' numero(s) mayor(es) que cero.' );
WRITE( 'La suma es ', Suma );
END.
10
2.- Sean 10 alumnos de la sección 3N6IS y dadas 5 notas por alumno de la materia
programación. Calcular y mostrar:
· El promedio de la materia por alumno.
· El promedio de la sección.
PROGRAM NOTAS1;
USES crt;
VAR alumnos,materia,notas: integer;
promedioalumno,promedioseccion,sumaseccion,suma,nota: Real;
nombre:string[30];
BEGIN
alumnos:=1;
sumaseccion:=0;
WHILE alumnos <=10 do
writeln('Introduzca el nombre del alumno: ');
readln(nombre);
suma:=0;
notas:=1;
WHILE notas <=5 do
writeln('Introduzca las 5 notas: ');
readln(nota);
suma:=suma+nota;
notas:=notas+1;
END;
promedioalumno:=suma/5;
sumaseccion:=sumaseccion+promedioalumno;
alumnos:=alumnos+1;
WRITELN('El nombre del alumnos es:', nombre);
WRITELN('El promedio del alumno es:', promedioalumno:2:2);
WRITELN;
promedioseccion:=sumaseccion/2;
WRITELN('El Promedio de la seccion es: ',promedioseccion:2:2);
READKEY
END.
3.- Escribir un programa en Pascal que calcule el factorial de un número.
PROGRAM Factorial;
USES CRT;
VAR factorial, x, num, y:REAL;
BEGIN
ClrScr;
WRITE ('Introduzca un numero para hacer su factorial: ');
READLN (num);
WRITELN;
x:=1;
WHILE num > 1 DO
x:=x * num;
num:=num - 1;
WRITELN (x);
END.
11
ESTRUCTURA REPEAT
1.- Mostrar y sumar números enteros (Anidamiento de repetitivas y alternativas Pascal)
Escribir un programa (en Pascal) que:
1º) Pida por teclado dos números (datos enteros). 2º) En el caso de que el primer número
introducido por el usuario, no sea mayor que cero y el segundo menor que cero, muestre por
pantalla el mensaje:
•
"ERROR: El primer número debe ser mayor que cero y el segundo menor que cero."
En caso contrario, muestre por pantalla los números que hay entre los dos números
introducidos por el usuario, ambos inclusive, así como, la suma de todos ellos.
PROGRAM Suma_de_enteros;
USES Crt;
VAR Mayor, Menor, Suma : Integer;
BEGIN
ClrScr;
WRITE( 'Introduzca primer numero entero: ' );
READLN( Mayor );
WRITE( 'Introduzca segundo numero entero: ' );
READLN( Menor );
Suma := 0;
IF ( Mayor > 0 ) and ( Menor < 0 ) then
BEGIN
repeat
WRITE( Menor, ' ' );
Suma := Suma + Menor;
Menor := Menor + 1
until Menor > Mayor;
WRITELn;
WRITE( 'La suma es ', Suma );
END
ELSE
WRITE( 'ERROR: El primer numero debe ser mayor que cero y el segundo menor que cero.' );
END.
12
2.- Escribir un programa en Pascal que genere la tabla de multiplicar de un número
introducido por el teclado.
PROGRAM TABLA_MULTIPLICAR;
USES CRT;
VAR tabla, x, num:INTEGER;
BEGIN
ClrScr;
WRITE ('Introduzca un numero para hacer su tabla de multiplicar: ');
READLN (num);
WRITELN;
REPEAT
WRITELN (tabla);
x:= x + 1;
tabla:= num * x;
UNTIL x=11;
END.
3.- Escribir un programa en Pascal que calcule la media de 5 números introducidos por
el teclado.
PROGRAM Media;
USES CRT;
VAR i:INTEGER;
VAR num,suma,media:REAL;
BEGIN
ClrScr;
i:=0;
REPEAT
WRITE('Introduzca un numero: ');
READLN(num);
suma:=suma+num;
i:=i+1;
UNTIL i=5;
media:= suma/i
WRITE('La media es: ',media:5:2);
END.
13
ESTRUCTURA FOR
1.- Escribir un programa en Pascal que calcule la suma de los cuadrados de los 100
primeros números enteros. (FOR)
PROGRAM Suma_de_cuadrados;
USES CRT;
VAR i:INTEGER;
VAR sumacuad:Real;
BEGIN
ClrScr;
FOR i:=1 TO 100 DO
sumacuad:=sumacuad+sqr(i);
WRITE('Suma de Cuadrados (1-100) ---> '); WRITE(sumacuad);
END.
Una segunda solución es:
PROGRAM Suma_de_cuadrados;
USES CRT;
VAR x:INTEGER;
VAR suma:REAL;
BEGIN
ClrScr;
FOR x:=1 TO 100 DO
suma:= suma + (sqr(x));
WRITE (suma);
END.
14
2.- Escribir un programa en Pascal que lea 4 datos, calcule y visualice en pantalla su
producto, suma y media aritmética. (FOR)
PROGRAM producto_suma;
USES CRT;
VAR i:INTEGER;
VAR dato,producto,suma,media:REAL;
BEGIN
ClrScr;
producto:=1;
suma:=0;
FOR i:=1 TO 4 DO
BEGIN
WRITE('Dato '); WRITE(i); WRITE('-> ');
READLN(dato);
producto:=producto*dato;
suma:=suma+dato;
END;
media:=suma/i;
WRITE('Producto: '); WRITELN(producto:5:2);
WRITE('Suma:
'); WRITELN(suma:5:2);
WRITE('Media:
'); WRITELN(media:5:2);
END.
Una segunda solución es:
PROGRAM producto_suma;
USES CRT;
VAR a,b,c,d:REAL;
VAR producto,suma,media:REAL;
BEGIN
ClrScr;
WRITELN('Introduzca 4 datos para calcular las soluciones:');
WRITELN ('');
WRITE ('a: '); READLN (a);
WRITE ('b: '); READLN (b);
WRITE ('c: '); READLN (c);
WRITE ('d: '); READLN (d);
WRITELN ('');
producto:= a * b * c * d;
suma:= a + b + c + d;
media:= suma / 2;
WRITELN ('El valor del producto de los numeros es: ', producto:10:2);
WRITELN ('El valor de la suma de los numeros es: ',suma:10:2);
WRITELN ('El valor de la media de los numero ses: ',media:10:2);
END.
15
3.- Escribir un programa en Pascal que calcule, independientemente, la suma y la
media de los números pares e impares comprendidos entre 1 y 200.
PROGRAM Par_impar;
USES CRT;
VAR media_p, media_i:REAL;
VAR suma_p, suma_i:LONGINT;
VAR i, total_p, total_i:LONGINT;
BEGIN
ClrScr;
FOR i:=1 TO 200 DO
IF (i mod 2)=0 THEN
suma_p:=suma_p + i;
total_p:=total_p + 1;
ELSE
suma_i:=suma_i + i;
total_i:=total_i + 1;
END;
END;
media_i:= suma_i / total_i;
media_p:= suma_p / total_p;
WRITELN ('La suma de los impares es: ',suma_i);
WRITELN ('La suma de los pares es : ',suma_p);
WRITELN ('La media de los impares es: ',media_i:5:2);
WRITELN ('La media de los pares es: ',media_p:5:2);
END.
Una segunda solución es:
PROGRAM Par_impar;
USES CRT;
VAR i,conpar,conimp,sumapar,sumaimp:INTEGER;
BEGIN
ClrScr;
sumapar:=0; sumaimp:=0; conpar:=0; conimp:=0;
FOR i:=1 TO 200 DO
BEGIN
IF (i mod 2) = 0 THEN
sumapar:=sumapar+i;
conpar:=conpar+1;
ELSE
sumaimp:=sumaimp+i;
conimp:=conimp+1;
END;
END;
WRITE('Suma pares: '); WRITELN(sumapar:7);
WRITE('Media pares: '); WRITELN(sumapar div conpar:7);
WRITE('Suma impares: '); WRITELN(sumaimp:7);
WRITE('Media impares: '); WRITELN(sumaimp div conimp:7);
END.
16
Descargar