1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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