Ejercicio 1: Contar temperaturas bajo cero
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.
Ejercicio 2: Contar notas 0, 5 y 10
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 cuántos 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;
nota, i, alumnos: Integer;
notas_no: Array[1..30] of Integer;
Begin
ClrScr;
cero := 0;
cinco := 0;
diez := 0;
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 alumnos DO
If notas_no[i] <> 0 then
WRITE(notas_no[i], ', ');
END.
Ejercicio 3: Contar vocales en una frase
Decir el número 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']);
{Poniéndolas en mayúsculas conseguimos unificar el valor de las vocales
y evitamos decir al usuario que las introduzca en mayúsculas o
minúsculas}
var
cont, i: Integer;
letra: Char;
frase: Array[1..85] of Char;
Begin
ClrScr;
WRITELN('Escriba una frase, acabando con un punto');
WRITELN;
i := 0;
cont := 0;
REPEAT
inc(i);
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 {preguntamos 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']);
{Poniéndolas en mayúsculas conseguimos unificar el valor de las vocales
y evitamos decir al usuario que las introduzca en mayúsculas o
minúsculas}
var
cont, i: Integer;
letra: Char;
frase: String; {Es lo único que cambia con respecto a la otra versión}
Begin
ClrScr;
WRITELN('Escriba una frase, acabando con un punto');
WRITELN;
i := 0;
cont := 0;
REPEAT
inc(i);
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 {preguntamos 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.
Ejercicio 4: Mostrar letras del abecedario en una frase
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;
abc: String;
i, longitud: Integer;
Begin
ClrScr;
WRITELN('Escriba una frase, terminando con un punto');
WRITELN;
i := 0;
longitud := 0;
abc:='';
REPEAT
caracter := Upcase(Readkey);
WRITE(caracter);
If caracter in ['A'..'Z'] then
Begin
abc := abc + caracter; {Se concatenan las letras del abecedario}
inc(i);
End;
UNTIL caracter = '.';
longitud := i;
WRITELN;
WRITELN;
WRITELN('Las letras del abecedario introducidas son: ');
WRITELN;
For i := 1 To length(abc) Do
WRITE(abc[i], ' ');
End.
Ejercicio 5: Invertir una frase
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}
f_inv: String; {Cada uno debe elegir la manera que mejor entienda, y controle, eso sí, siempre hay que dominar las dos formas.}
i: Integer;
Begin
ClrScr;
i := 0;
WRITELN('Escriba una frase:');
READLN(frase);
WRITELN;
WRITELN;
For i := 1 to length(frase) do {desde la primera posición de la frase hasta la última almacenamos la frase en una variable}
f_inv := f_inv + frase[i];
FOR i := length(frase) downto 1 do
WRITE(f_inv[i]);
End.
PROGRAM EJER006_2;
Uses Crt;
var
frase: String;
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 pasaríamos en un carácter}
WRITE(frase[i]);
{Si lo único que quieres es mostrar la cadena de caracteres a la inversa, en esta versión lo hemos hecho únicamente con una variable}
End.
Ejercicio 6: Comparar dos arrays de caracteres
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;
index, long1, long2: Integer; {long1 y long2 son la longitud de las cadenas}
letra: Char;
iguales: Boolean;
Begin
ClrScr;
WRITELN('Introduzca la primera cadena de caracteres, finalizando con un punto');
WRITELN;
index := 1;
long1 := 0;
long2 := 0;
frase1:='';
frase2:='';
REPEAT
letra := Readkey;
write(letra); {Readkey no muestra los caracteres en pantalla, write sí}
frase1 := frase1 + letra; {vamos almacenando cada letra en la variable}
index := index + 1;
UNTIL letra = '.';
long1 := index-1; {medimos la longitud de la cadena}
WRITELN;
WRITELN;
WRITE('Introduzca la segunda cadena de caracteres, finalizando con un punto');
WRITELN;
WRITELN;
letra := ' ';
index := 1;
REPEAT
letra := Readkey;
write(letra);
frase2 := frase2 + letra; {vamos almacenando cada letra en la variable}
index := index + 1;
UNTIL letra = '.';
long2 := index-1; {medimos 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 qué bucle ha entrado en los diferentes casos que se pueden dar}
Else
Begin
iguales:=true;
For index := 1 to long1 do
Begin
if frase1[index] <> frase2[index] then
Begin
iguales:=false;
WRITE('Las cadenas de caracteres no son iguales');
{*Pongo dos mensajes distintos para que veamos en qué bucle ha entrado
en los diferentes casos que se pueden dar}
exit;
End;
End;
End;
If iguales = true then
WRITELN('Las cadenas de caracteres son iguales');
End.
Ejercicio 7: Sumar valores encima de la diagonal principal de una matriz
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; {Número de filas y columnas de la matriz}
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, sumaremos: 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 número 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}
suma := 0;
i := 1;
FOR j := 2 to N do
Begin
suma := suma + matriz[i, j];
WRITELN(suma); {Lo escribimos para chequear los valores, podríamos escribir un write al final y sería 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.
Ejercicio 8: Calcular la nota media de alumnos y mostrar aptitud
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 número de alumnos hay, es decir, obtenemos 5 filas iguales}
var
clase: notas;
nombre: String;
n_parcial, n_final, n_media: Real;
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.
Ejercicio 9: Almacenar características de personas en un array de registros
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 número de personas que deseemos}
Type
caracteristicas = record
nombre2, nacionalidad2: String;
edad2: Integer;
sexo2, c_pelo2, c_ojos2: Char;
tf2: Longint;
end;
{Creamos una fila con diferentes apartados}
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('Teléfono: ');
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, 'Teléfono':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;
Readln;
End.