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