Anda di halaman 1dari 12

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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar


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 gcerveri@frlp.utn.edu.ar

Anda mungkin juga menyukai