Ejercicios de Pascal -2010_2 - UTN

Anuncio
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
Práctico de Pascal Nº 2
Ejercicios para la ejercitación del Lenguaje Pascal
Objetivo: Es que los alumnos conozcan un lenguaje de programación, donde puedan ejercitar los
conocimiento adquiridos hasta ahora en los TP de Pseudocodigo.
En nuestra página encontrara un conjunto de apuntes de lenguaje pascal en la sección Apuntes.
La versión que vamos a tomar como referencia es el FreePascal.org
Descarga: http://www.freepascal.org/download.var
Ejercicios
1. El siguiente programa captura 10 edades y nombres por medio de arrays paralelos y
los muestra ordenados en forma ascendente
PROGRAM Paralelo_edades;
USES Crt;
CONST
MaxPersonas = 10;
VAR
edades
: array [1..MaxPersonas] of byte;
nombres
: array [1..MaxPersonas] of string [10];
aux_nom
: string[10];
i,j,aux_edad :byte;
BEGIN
ClrScr;
{lectura de arrays paralelos de manera simultánea}
FOR i:=1 to MaxPersonas DO
BEGIN
gotoxy(10,5);
ClrEol;
WRITE(i,'.- Nombre : ','Edad : ');
gotoxy(23,5);ReadLn(nombres[i]) ;
gotoxy(48,5);ReadLn(edades[i])
END;
{ordenación}
FOR i:=1 to MaxPersonas-1 DO
BEGIN
FOR j:=i+1 to MaxPersonas DO
BEGIN
IF edades[i]>edades[j] THEN
BEGIN
aux_edad :=edades[i];
edades[i] :=edades[j];
edades[j] :=aux_edad;
aux_nom :=nombres[i];
nombres[i]:=nombres[j];
nombres[j]:=aux_nom
END
Página 1 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
END;
WRITELN(nombres[i]:10,' ',edades[i]:3)
{escritura de los arrays paralelos}
END;
Readkey
END.
Esquema como se distribuyen los vectores: Arreglos Paralelos
2. El siguiente programa captura las calificaciones de 5 alumnos en 3 exámenes, y
despliega en pantalla los promedios ordenados en forma descendente
PROGRAM Matriz_Vector;
Uses Crt;
Const
MaxAlumno = 5;
MaxExamen = 4;{Columna 4 almacena el promedio}
Var
Alumno :array[1..MaxAlumno]
of string[10];
examen :array[1..MaxAlumno,1..MaxExamen] of real;
aux_examen :array[1..MaxExamen]
of real;
{reserva 20 posiciones de memoria de datos reales : 5 filas por 4 columnas}
promedio :real;
aux_alumno :string [10];
i,j,col,ren :byte;
BEGIN
ClrScr;
{Lectura de arrays paralelos de manera simultánea}
gotoxy(5,5);WRITE('Nombre');
gotoxy(20,5);WRITE('Examen1 Examen2 Examen3 Promedio');
col:=5;ren:=6;
FOR i:=1 to MaxAlumno DO
BEGIN
gotoxy(col,ren);
ReadLn(alumno[i]); {lectura de vector}
col:=22;promedio:=0;
FOR j:=1 to MaxExamen-1 DO
BEGIN
gotoxy(col,ren);
ReadLn(examen[i,j]); {lectura de matríz}
promedio:=promedio+examen[i,j];
col:=col+10
Página 2 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
END;
examen[i,j+1]:=promedio/3;
gotoxy(col,ren);WRITE(promedio/3:3:2);
inc(ren);
col:=5
END;
{Ordenación}
FOR i:=1 to MaxAlumno-1 DO
FOR j:=i+1 to MaxAlumno DO
BEGIN
IF examen[i,MaxExamen]<examen[j,MaxExamen] THEN
BEGIN
{Intercambio de nombres en vector}
aux_alumno:=alumno[i];
alumno[i] :=alumno[j];
alumno[j] :=aux_alumno;
{Intercambio de calificaciones en matríz}
move(examen[i],aux_examen,SizeOf(aux_examen));
move(examen[j],examen[i],SizeOf(aux_examen));
move(aux_examen,examen[j],SizeOf(aux_examen))
END
END;
{Recorrido de matriz y vector}
gotoxy(25,14);WRITE('Datos ordenados');
gotoxy(5,16);WRITE('Nombre');
gotoxy(20,16);WRITE('Examen1 Examen2 Examen3 Promedio');
col:=5;ren:=17;
FOR i:=1 to MaxAlumno DO
BEGIN
gotoxy(col,ren);
WRITE(alumno[i]);
col:=22;
FOR j:=1 to MaxExamen DO
BEGIN
gotoxy(col,ren);
WRITE(examen[i,j]:3:2);
col:=col+10
END;
col:=5;
inc(ren)
END;
readkey
END.
Página 3 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
Esquema como se distribuyen los vectores: Arreglos (Tablas)
3. El siguiente programa captura calificaciones de 5 alumnos en 3 exámenes de 3 materias
distintas, y despliega en pantalla los promedios ordenados en forma descendente
PROGRAM 3D;
Uses Crt;
Const
MaxAlumno = 5;
MaxExamen = 4; {Columna 4 almacena el promedio}
MaxMateria = 3;
materia : array[1..3]of string[8]=('Fisica','Ingles','Historia');
VAR
Alumno : array [1..MaxAlumno] of string[10];
examen : array [1..MaxAlumno,1..MaxExamen,1..MaxMateria] of real;
aux_examen : array [1..MaxExamen]of real;
{reserva 60 posiciones de memoria de datos reales : 5 filas por 4 columnas y 3
dimensiones}
promedio :real;
aux_alumno :string [10];
i,j,k,col,ren : byte;
BEGIN
ClrScr;
{lectura de arrays paralelos de manera simultánea}
FOR k:=1 to MaxMateria DO
BEGIN
ClrScr;
gotoxy(34,3);WRITE(materia[k]);
gotoxy(5,5);WRITE('Nombre');
gotoxy(20,5);WRITE('Examen1 Examen2 Examen3 Promedio');
col:=5;ren:=6;
FOR i:=1 to MaxAlumno DO
BEGIN
gotoxy(col,ren);
IF k=1 THEN
ReadLn(alumno[i]) {lectura de vector}
ELSE
WRITE(alumno[i]);
col:=22;promedio:=0;
FOR j:=1 to MaxExamen-1 DO
Página 4 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
BEGIN
gotoxy(col,ren);
ReadLn(examen[i,j,k]); {lectura de matríz}
promedio:=promedio+examen[i,j,k];
col:=col+10
END;
examen[i,j+1,k]:=promedio/3;
gotoxy(col,ren);WRITE(promedio/3:3:2);
inc(ren);
col:=5
END;
gotoxy(15,22);
WRITE('Presione una tecla para continuar....');
ReadKey
END;
{ordenación}
FOR k:=1 to MaxMateria DO
FOR i:=1 to MaxAlumno-1 DO
FOR j:=i+1 to MaxAlumno DO
BEGIN
IF examen[i,MaxExamen,k]<examen[j,MaxExamen,k] THEN
BEGIN
{Intercambio de nombres en vector}
aux_alumno:=alumno[i];
alumno[i] :=alumno[j];
alumno[j] :=aux_alumno;
{intercambio de calificaciones en matríz}
move(examen[i,k],aux_examen,SizeOf(aux_examen));
move(examen[j,k],examen[i,k],SizeOf(aux_examen));
move(aux_examen,examen[j,k],SizeOf(aux_examen))
END
END;
{Recorrido de matríz y vector}
FOR k:=1 to MaxMateria DO
BEGIN
ClrScr;
gotoxy(35,4);WRITE(materia[k]);
gotoxy(25,5);WRITE('Datos ordenados');
gotoxy(5,6);WRITE('Nombre');
gotoxy(20,6);WRITE('Examen1 Examen2 Examen3 Promedio');
col:=5;ren:=7;
FOR i:=1 to MaxAlumno DO
BEGIN
gotoxy(col,ren);
WRITE(alumno[i]);
col:=22;
FOR j:=1 to MaxExamen DO
BEGIN
gotoxy(col,ren);
WRITE(examen[i,j,k]:3:2);
Página 5 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
col:=col+10
END;
col:=5;
inc(ren)
END;
gotoxy(15,22);
WRITE('Presione una tecla para continuar....');
readkey
END
END.
Esquema como se distribuyen los vectores: Arreglos (Varias Dimensiones)
4. El siguiente programa captura un numero entero y lo pasa a binario
PROGRAM binario;
USES crt;
PROCEDURE bina (VAR nro:integer);
BEGIN
IF ( nro=0 or nro=1) THEN
WRITELN (nro);
ELSE
BEGIN
bina(nro div 2);
WRITELN( nro mod 2);
END;
END;
VAR
a: integer;
BEGIN
WRITELN ('Ingrese el nro a covertir');
readln (a);
bina(a);
readkey;
END.
5. El siguiente programa se aplica el método de inserción para un vector de 5 elemento
Página 6 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
PROGRAM inser;
USES CRT;
type
vec=array [1..5] of integer;
PROCEDURE lista (VAR x:vec);
VAR
j: integer;
BEGIN
FOR j:=1 to 5 DO
WRITELN('vec(',j,')=', x[J]);
readkey;
END;
PROCEDURE insercion( VAR vector:vec);
VAR
i,j, index: integer;
BEGIN
FOR i:= 2 to 5 DO
BEGIN
index:= vector[i];
j:=i;
while ((j>1) and (vector[j-1]>index)) DO
BEGIN
vector[j]:=vector[j-1];
j:=j-1;
END;
vector[j]:=index;
lista (vector);
END;
END;
VAR
a:vec;
j: integer;
BEGIN
a[1]:=-1;
a[2]:=0;
a[3]:=5;
a[4]:=3;
a[5]:=-5;
insercion (a);
lista (a);
END.
6. Escribir un programa en Pascal que solicite cinco números, los almacene en un array y
luego calcule la media aritmética de esos números.
PROGRAM Media;
USES CRT;
VAR arr_num:ARRAY [1..5] of REAL;
VAR i, num:INTEGER;
VAR media:REAL;
Página 7 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
BEGIN
ClrScr;
WRITELN ('Escriba 5 numeros para hacer su media aritmetica: ');
FOR i := 1 TO 5 DO
BEGIN
READLN(num);
arr_num[i]:=num;
END;
FOR i:=1 TO 5 DO
media:= media + arr_num[i];
media:= media / i;
WRITELN ('La media aritmetica es: ',media:5:2);
END.
7. Escribir un programa en Pascal que determine la posición de la siguiente matriz en la
que se encuentra el valor máximo
23 45 68
34 99 12
25 78 89
PROGRAM Valor_Max
USES CRT;
CONST arr_num:ARRAY[1..3,1..3] of INTEGER=( (23,45,68),
(34,99,12),
(25,78,89) );
VAR i,j,val_max,pos_max_i,pos_max_j:INTEGER;
BEGIN
ClrScr;
val_max:=arr_num[1,1];
67
FOR i:=1 TO 3 DO
BEGIN
FOR j:=1 TO 3 DO
BEGIN
IF arr_num[i,j] > val_max THEN
BEGIN
val_max:=arr_num[i,j];
pos_max_i:=i;
pos_max_j:=j;
END;
END;
END;
WRITELN( 'VALOR MAXIMO: ', val_max:3,
' POSICION: ', pos_max_i:3,pos_max_i:3);
END.
8. Escribir un programa en Pascal que sume, independientemente, los elementos positivos
y negativos de la siguiente matriz:
-12 23 32
45 -56 -10
25 78 89
Página 8 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
PROGRAM Sume;
USES CRT;
CONST arr_num:ARRAY[1..3,1..3] of INTEGER=( (-12,23,-32),
(45,-56,-10),
(25,78,89) );
VAR i,j,suma_pos,suma_neg:INTEGER;
BEGIN
suma_pos:=0;
suma_neg:=0;
ClrScr;
FOR i:=1 TO 3 DO
BEGIN
FOR j:=1 TO 3 DO
BEGIN
IF arr_num[i,j] < 0 THEN
suma_neg:=suma_neg+arr_num[i,j]
ELSE
suma_pos:=suma_pos+arr_num[i,j]
END;
END;
WRITELN('SUMA POSITIVOS: ', suma_pos:5);
WRITELN('SUMA NEGATIVOS: ', suma_neg:5);
END.
9. Escribir un programa en Pascal que almacene en la segunda fila de la siguiente matriz
los cuadrados de los datos de la primera fila:
36789
00000
PROGRAM Almacene;
USES CRT;
CONST arr_num:ARRAY [1..2,1..5] of INTEGER=( (3,6,7,8,9),
(0,0,0,0,0) );
VAR i,j,cuad:INTEGER;
BEGIN
ClrScr;
i:=1;
FOR j:=1 TO 5 DO
BEGIN
FOR i:=1 TO 1 DO
BEGIN
cuad:=sqr(arr_num[i,j]);
arr_num[2,j]:= cuad;
WRITELN (arr_num[2,j]);
END;
END;
END.
10. Escribir un programa en Pascal que sume los elementos de cada una de las filas y de las
columnas de la siguiente matriz; el resultado de cada suma se almacenará en la última
posición de la fila o columna correspondiente. Además la suma total de todos los
elementos de la matriz se almacenará en el elemento de la esquina inferior derecha de la
matriz:
Página 9 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
170
560
640
730
000
PROGRAM Ej10;
USES CRT;
CONST arr_num:ARRAY [1..5,1..3] of INTEGER=( (1,7,0),(5,6,0),
(6,4,0),(7,3,0),
(0,0,0) );
VAR i,j,total:INTEGER;
VAR suma_h,suma_v:INTEGER; {Es la suma horizontal y vertical}
BEGIN
ClrScr;
total := 0;
FOR i:=1 TO 5 DO
BEGIN
suma_h:=0;
FOR j:=1 TO 3 DO
suma_h:= suma_h + arr_num[i,j];
WRITELN ('La suma de la fila ',i,' es: ',suma_h:3);
total:=total + suma_h;
END; WRITELN ('');
FOR j:=1 TO 2 DO
BEGIN
suma_v:=0;
FOR i:=1 TO 5 DO
suma_v:= suma_v + arr_num[i,j];
WRITELN ('La suma de la columna ',j,' es: ',suma_v:3);
total:=total + suma_v;
END; WRITELN ('');
WRITELN ('La suma total es: ',total);
END.
11. 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 Nombres (Input, Output);
Uses Crt;
Const numalumnos = 5;
Type tiponotas = record
nombre: String;
parcial, final: real
end;
notasclase = array [1..Numalumnos] of tiponotas;
VAR I3: notasclase;
nota1, nota2: real;
alumno: String;
index: integer;
Begin
ClrScr;
Página 10 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
for index := 1 to numalumnos do
begin
write('Nombre de alumno(',index,'): ');
readln(alumno);
write('Nota del examen parcial: ');
readln(nota1);
write('Nota del examen final: ');
readln(nota2);
WRITELN;
with i3[index] DO
begin
nombre := alumno;
parcial := nota1;
final := nota2
end
end;
ClrScr;
WRITELN('NOMBRE ':30,'Parcial':10,'Final':10,'Media':10,' CALIFICACION');
for index := 1 to 75 DO write('-');
WRITELN;
for index := 1 to numalumnos DO
with i3[index] DO
begin
{Escribir la lista con los resultados.}
nota1 := (parcial+final)/2;
{Se calcula la media.}
write(nombre:30,parcial:10:2,final:10:2);
write(nota1:10:2);
{Si la nota media es superior a 5, el alumno est aprobado:}
if nota1 >= 5 THEN WRITELN(' *** APTO *** ')
ELSE WRITELN(' NO APTO')
END;
readkey
END.
12. 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 EJER010;
Uses Crt;
Const numpersonas = 2; {Cambiando este valor lo podremos hacer para el numero de
personas que deseemos}
Type caracteristicas = record
nombre2, nacionalidad2, sexo2: String;
edad2: Integer;
c_ojos2: Char;
tf2: Real;
{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, sexo: String;
edad, i: Integer;
c_ojos: Char;
Página 11 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
UTN – FRLP – Ing. en Sistemas de Información – Algoritmos y Estructura de Datos
Trabajos Prácticos – Curso 2010
tf: Real;
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') or (sexo = 'h') or (sexo = 'm');
WRITE('Telefono: '); READLN(tf);
Repeat
WRITE('Color de ojos (A, V, M): ');
READLN(c_ojos);
c_ojos := UPCASE(c_ojos);
Until (c_ojos = 'A') or (c_ojos = 'V') or (c_ojos = 'M');
WRITELN;
With persons[i] DO
Begin
nombre2 := nombre;
edad2 := edad;
nacionalidad2 := nacionalidad;
If (sexo = 'H') or (sexo = 'h') THEN
sexo2 := 'S¡ gracias';
tf2 := tf;
c_ojos2 := c_ojos;
{Almacenamos los datos dentro del array de registro}
END;
END;
textcolor(11);
WRITELN('Nombre':14,'Edad':6,'Nacionalidad':14,'Sexo':12,'Telefono':12,'Color
Ing. Nahiby Castillo 9
ojos':12);
textcolor(7);
For i := 1 to numpersonas DO
Begin
with persons[i] DO
Begin
WRITELN(nombre2:14,edad2:6,Nacionalidad2:14,sexo2:12,tf2:12:0,c_ojos2:12);
END;
END;
END.
Página 12 de 12
Ing. Gustavo J.A. Cerveri – JTP
[email protected]
Descargar