- Escribir un programa que lea tres números enteros e indique
si están o no, en orden numérico ascendente o descendente.
PROGRAM EJER_001;
Uses Crt;
var num1,num2,num3:Integer;
Begin
ClrScr;
WRITELN('Introduzca tres numeros:');
WRITE('Numero 1: '); READLN(num1);
WRITE('Numero 2: '); READLN(num2);
WRITE('Numero 3: '); READLN(num3);
WRITELN;
WRITELN;
If (num1 > num2) and (num2 > num3) then
WRITELN('Ha introducido los numeros en orden decreciente.')
Else if (num1 < num2) and (num2 < num3) then
WRITELN('Ha introducido los numeros en orden creciente.')
Else
WRITELN('No ha introducido los numeros en orden.');
End.
- Escribir un programa que lea 5 valores de temperatura, y escriba el
número de veces que estuvo bajo 0º.
PROGRAM EJER_002;
Uses Crt;
var temp,i,cont:Integer;
Begin
WRITELN ('Introduzca 5 valores de temperatura:');
WRITELN;
cont := 0;
For i := 0 to 4 do
Begin
WRITE('Valor ',i + 1,' : '); {i + 1 mostrará valores
del 1 al 5}
Readln(temp);
If temp < 0 Then
inc(cont); {cont = cont + 1}
End;
WRITELN;
WRITE('La temperatura ha estado ',cont);
If cont = 1 then
WRITE (' vez bajo 0')
Else
WRITE (' veces bajo 0');
End.
- Se realiza un examen, se piden las notas del número de alumnos
introducidos por el usuario, las cuales pueden ser únicamente enteras
entre 0 y 10. Debe decirse cuantos 0, 5 y 10 han aparecido. También
deben decirse las notas introducidas que no sean 0, 5 o 10.
PROGRAM EJER_003;
Uses Crt;
var cero, cinco, diez: Integer;
var nota, i, alumnos: Integer;
var notas_no: Array [1..30] of Integer;
Begin
ClrScr;
WRITE('Introduzca el numero de alumnos: '); READLN(alumnos);
WRITELN;
WRITELN('Introduzca las calificaciones: (en valores enteros) ');
WRITELN;
For i := 1 to alumnos do
Begin
WRITE('Alumno: '); READLN(nota);
If nota = 0 then inc(cero)
else if nota = 5 then inc(cinco)
else if nota = 10 then inc(diez)
else
notas_no[i] := nota;
End;
WRITELN;
WRITE('Ha habido ',cero);
If cero = 1 then WRITELN(' cero.') else WRITELN
(' ceros.');
WRITE('Ha habido ',cinco);
If cinco = 1 then WRITELN(' cinco.') else WRITELN
(' cincos.');
WRITE('Ha habido ',diez);
If diez = 1 then WRITELN(' diez.') else WRITELN
(' dieces.');
WRITELN;
WRITELN('Las notas aparecidas que no son 0, 5 o 10 son: ');
For i := 1 to i DO
IF notas_no[i] <> 0 then WRITE(notas_no[i],', ');
END.
- Decir el numero de vocales que aparecen en una frase introducida por
el usuario. Debe acabar con un punto.
PROGRAM EJER_004;
Uses Crt;
Const vocales: Set of Char = (['A','E','I','O','U']);
{Poniendolas en mayusculas conseguimos unificar el valor de las vocales
y evitamos decir al usuario que las introduzca en mayusculas o
minusculas}
var cont, i:Integer;
var letra: Char;
var frase: Array[1..85] of Char;
Begin
ClrScr;
WRITELN('Escriba una frase, acabando con un punto'); WRITELN;
i:=0;
cont:=0;
REPEAT
letra := Readkey;{Readkey no mostrará los caracteres
en pantalla}
WRITE (letra); {Debemos incluirlo para que nos muestre los
caracteres}
if UPCASE(letra) in vocales then {pregutamos si la letra introducida
es una vocal}
inc(cont);
frase[i]:=letra; {guardamos el valor de la letra en el array frase}
UNTIL letra = '.';
WRITELN;
WRITELN;
WRITE ('El numero de vocales introducidas es ',cont);
End.
PROGRAM EJER_004_2;
Uses Crt;
Const vocales: Set of Char = (['A','E','I','O','U']);
{Poniendolas en mayusculas conseguimos unificar el valor de las vocales
y evitamos decir al usuario que las introduzca en mayusculas o
minusculas}
var cont, i:Integer;
var letra: Char;
var frase: String;{Es lo unico que cambia con respecto a la otra version}
Begin
ClrScr;
WRITELN('Escriba una frase, acabando con un punto'); WRITELN;
i:=0;
cont:=0;
REPEAT
letra := Readkey; {Readkey no mostrara los caracteres en pantalla}
WRITE (letra); {Debemos incluirlo para que nos muestre los
caracteres}
if UPCASE(letra) in vocales then {pregutamos si la letra introducida
es una vocal}
inc(cont);
frase[i]:=letra; {guardamos el valor de la letra en el array frase}
UNTIL letra = '.';
WRITELN;
WRITELN;
WRITE ('El numero de vocales introducidas es ',cont);
End.
- Pedir que se introduzca una frase, acabada con un punto en la que se
lean las letras del abecedario introducidas y se muestren posteriormente.
PROGRAM EJER005;
Uses Crt;
var caracter : Char;
var abc : String;
var i, longitud: Integer;
Begin
ClrScr;
WRITELN('Escriba una frase, terminando con un punto');
WRITELN;
i := 0;
longitud := 0;
REPEAT
caracter := Upcase(Readkey);
WRITE(caracter);
If caracter in ['A'..'Z'] then
Begin
abc[i] := caracter;
{el array abc quedara con espacios vacios,los
que no sean letras del abedecario, si no se pone
el incremento de i dentro+ de este begin-end.
Prueba a quitar el begin-end si tienes curiosidad
en verlo}
inc(i);
End;
UNTIL caracter = '.';
longitud := i;
WRITELN;
WRITELN;
WRITELN('Las letras del abecedario introducidas son: ');
WRITELN;
For i := 0 To longitud Do
WRITE(abc[i],' ');
End.
- Escribir un programa en Pascal que lea una frase introducida
desde el teclado y la escriba al revés.
PROGRAM EJ006;
Uses Crt;
var frase: String; {Se puede hacer con arrays}
var f_inv: String; {Cada uno debe elegir la manera que
mejor entida, y controle, eso si, siempre hay que dominar
las dos formas.}
var i: Integer;
Begin
ClrScr;
i := 0;
WRITELN('Escriba una frase:');
READLN(frase);
WRITELN;
WRITELN;
For i := 0 to length(frase) do {desde la primera posicion de
la frase hasta la ultima almacenamos la frase en una variable}
f_inv[i] := frase[i];
FOR i := length(frase) downto 0 do
WRITE(f_inv[i]);
End.
PROGRAM EJER006_2;
Uses Crt;
var frase: String;
var i: Integer;
Begin
ClrScr;
i := 0;
WRITELN('Escriba una frase:');
WRITELN;
READLN(frase);
WRITELN;
FOR i := length(frase) downto 1 do {Si ponemos "downto 0" nos
pasariamos en un caracter}
WRITE(frase[i]);
{Si lo unico que quieres es mostrar la cadena de caracteres a la
inversa, en esta version lo hemos hecho unicamente con una
variable}
End.
- Escribir un programa que compare dos arrays de caracteres y
nos diga si son idénticos o no.
PROGRAM EJER007;
Uses Crt;
var frase1, frase2: String;
var index,long1,long2: Integer; {long1 y long2 son la
longitud de las cadenas}
var letra: Char;
var iguales: Boolean;
Begin
ClrScr;
WRITELN ('Introduzca la primera cadena de caracteres,
finalizando con un punto');
WRITELN;
index := 0;
long1 := 0;
long2 := 0;
REPEAT
Begin
letra := Readkey;
write(letra); {Readkey no muestra los caracteres en
pantalla, write si}
frase1[index] := letra; {vamos almacenando cada letra
en la variable}
index := index + 1;
End;
UNTIL letra='.';
long1 := index; {medimos la longitud de la cadena}
WRITELN;
WRITELN;
WRITE('Introduzca la segunda cadena de caracteres, finalizando
con un punto');
WRITELN;
WRITELN;
letra := ' ';
index := 0;
REPEAT
Begin
letra := Readkey;
write(letra);
frase2[index] := letra; {vamos almacenando cada letra en
la variable}
index := index + 1;
End;
UNTIL letra='.';
long2 := index; {medidos la longitud de la cadena}
WRITELN;
WRITELN;
If long1 <> long2 then {Si la longitud es distinta, SEGURO que
no son iguales}
WRITELN ('Las cadenas de caracteres son distintas')
{*Pongo dos mensajes distintos para que veamos en que bucle
ha entrado en los diferentes casos que se pueden dar}
Else
Begin
For index := 0 to long1 do
Begin
if frase1[index] <> frase2[index] then
Begin
WRITE('Las cadenas de caracteres no son iguales');
{*Pongo dos mensajes distintos para que veamos
en que bucle ha entrado
en los diferentes casos que se pueden dar}
exit;
End
else
iguales := true; {almacenamos en una variable que
las cadenas son iguales}
End;
End;
If iguales = true then WRITELN ('Las cadenas de caracteres
son iguales');
End.
- Escribir un programa en Pascal que sume los valores que hay por encima
de la diagonal principal. Los valores se pueden asignar como una
constante.
PROGRAM EJER008;
Uses Crt;
Const N = 4; {Numero de filas y columnas de la matriz}
Const matriz: Array [1..N,1..N] of Integer = ((1, 2, 3, 4),
( 5, 6, 7, 8),
( 9,10,11,12),
(13,14,15,16));
{Declaramos la matriz}
var i, j, suma: Integer;
{i se corresponde con las filas y j con las columnas}
Begin
ClrScr; {limpiamos la pantalla}
{los valores de la diagonal principal son (1,1) (2,2)
(3,3) (4,4).
Como este ejercicio consiste en sumar los valores que hay
encima de la diagonal principal, sumares: 2 + 3 + 4 + 7 + 8 + 12}
{Escribimos la matriz original y coloreamos los valores que
necesitamos}
For i := 1 to N Do
Begin
For j := 1 to N Do
Begin
If j > i then
Textcolor(9) {Cambiando el numero
elegiremos el color}
Else
TextColor(7);
WRITE(matriz[i,j]:3);
End;
WRITELN(' ');
End;
WRITELN;{Suma de los valores de la primera fila de la matriz}
i := 1;
FOR j := 2 to N do
Begin
suma := suma + matriz[i,j];
WRITELN(suma); {Lo escribimos para chequear los valores,
podriamos escribir un write al final y seria suficiente}
End;
{Suma de los valores de la segunda fila}
i := 2;
FOR j := 3 to N do
Begin
suma := suma + matriz[i,j];
WRITELN(suma);
End;
WRITELN;{Suma de los valores de la tercera fila}
i := 3;
FOR j := 4 to N do {N ya vale 4, por lo que solo se realiza
1 vez el bucle}
Begin
suma := suma + matriz[i,j];
WRITELN('El resultado final es: ',suma);
End;
End.
- Escribir un programa en Pascal que almacene en un array de registros
los nombres de los alumnos, sus notas parciales y finales. Hallar la
nota media y mostrar un mensaje de APTO si el alumno supera o iguala la
calificación de 5 o NO APTO si no lo alcanza. Hacerlo para un
número de 5 alumnos.
PROGRAM EJER009;
Uses Crt;
Const numalumnos = 5;
Type tnotas = record
nombre2 : String;
n_parcial2, n_final2: Real; {Nota parcial y final}
end;
{Hacemos una fila dividida en 4 partes:tnotas, nombre2,
n_parcial2, n_final2. Es como una tabla de Word, la cual
iremos rellenando con los datos obtenidos}
notas = Array[1..numalumnos] of tnotas;
{Ahora la copiamos tantas veces como numero de alumnos hay,
es decir, obtenemos 5 filas iguales}
var clase : notas;
var nombre: String;
var n_parcial, n_final, n_media: Real;
var i: Integer;
Begin
ClrScr;
For i := 1 to numalumnos Do
Begin
WRITE('Introduzca el nombre del alumno ',i,' : ');
READLN(nombre);
WRITE('Introduzca su nota parcial: ');
READLN(n_parcial);
WRITE('Introduzca su nota final: ');
READLN(n_final);
WRITELN;
With clase[i] Do
Begin
n_parcial2 := n_parcial;
n_final2 := n_final;
nombre2 := nombre;
End;
End;
ClrScr;
WRITELN('NOMBRE':25,'Parcial':8,'Final':8,'Media':8,
'CALIFICACION':15);
WRITELN;
For i := 1 to numalumnos do
With clase[i] do
Begin
n_media := (n_parcial2 + n_final2) / 2;
WRITE(nombre2:25,n_parcial2:8:2,n_final2:8:2);
textcolor(14); WRITE(n_media:8:2);
If n_media >= 5 then
Begin
textcolor(11);
WRITELN ('APTO :-)':15);
End
Else
Begin
textcolor(1);
WRITELN ('NO APTO :-(':15);
End;
textcolor(7);
End;
End.
- Escribir un programa en Pascal que almacene en un array de registros
las características de cada persona: nombre, sexo, edad, peso, color
de pelo, color de piel, color de ojos, nacionalidad y teléfono.
PROGRAM EJER_010;
Uses Crt;
Const numpersonas = 1; {Cambiando este valor lo podremos
hacer para
el numero de personas que deseemos}
Type caracteristicas = record
nombre2, nacionalidad2: String;
edad2: Integer;
sexo2, c_pelo2, c_ojos2: Char;
tf2: Longint;
{Creamos una fila con diferentes apartados}
end;
personas = Array[1..numpersonas] of caracteristicas;
{La copiamos tantas veces como personas haya}
var persons : personas;
nombre, nacionalidad: String;
edad, i: Integer;
sexo, c_pelo, c_ojos: Char;
tf: Longint;
Begin
ClrScr;
For i := 1 to numpersonas do
Begin
WRITELN('Introduzca los datos de la persona numero ',i,
' : ');
WRITELN;
WRITE('Nombre: '); READLN(nombre);
WRITE('Edad: '); READLN(edad);
WRITE('Nacionalidad: '); READLN(nacionalidad);
Repeat
WRITE('Sexo (H, M): '); READLN(sexo);
Until (sexo = 'H') or (sexo = 'M');
WRITE('Telefono: '); READLN(tf);
Repeat
WRITE('Color de ojos (A, V, M): '); READLN(c_ojos);
Until (c_ojos = 'A') or (c_ojos = 'V') or (c_ojos = 'M');
Repeat
WRITE('Color de pelo (R, M, C): '); READLN(c_pelo);
Until (c_pelo = 'R') or (c_pelo = 'M') or (c_pelo = 'C');
WRITELN;
With persons[i] do
Begin
nombre2 := nombre;
edad2 := edad;
nacionalidad2 := nacionalidad;
sexo2 := sexo;
tf2 := tf;
c_ojos2 := (c_ojos);
c_pelo2 := (c_pelo);
{Almacenamos los datos dentro del array de registro}
End;
End;
textcolor(11);
WRITELN('Nombre':15,'Edad':6,'Nacionalidad':15,'Sexo':6,
'Telefono':12,'Color ojos':12,'Color pelo':12);
textcolor(7);
For i := 1 to numpersonas do
Begin
with persons[i] do
Begin
WRITE(nombre2:15,edad2:6,Nacionalidad2:15,
sexo2:6,tf2:12,c_ojos2:12,c_pelo2:12);
End;
End;
{Las caracteristicas que se piden al usuario para obtener
informacion de las diferentes personas son simples ejemplos. Si se
quieren cambiar, y poner por ejemplo, si esta casado o soltero, sus
estudios, etc., unicamente habra que crear nuevas variables o
sustituir las existentes.}
End.
Estos ejercicios tienen un nivel más avanzado. En los 107
ejercicios anteriores empezamos desde 0 y llegamos hasta la
utilización de arrays. En estos ejercicios superamos ese
nivel, nos afianzamos en el uso de arrays y seguimos ampliando
conocimientos.
Volver