You are on page 1of 2

Algoritmos y Estructuras de Datos

Registros:

Los arreglos permiten agrupar datos, pero todos del mismo tipo. Cuando tenemos necesidad de
agrupar datos de diferente tipo (no est prohibido que sean todos del mismo tipo) hacemos uso de
los record (registros). Por ejemplo supongamos que deseamos agrupar datos de los alumnos de
un curso (numero, nombre, notas enteras de 4 parciales, promedio), podemos hacer lo siguiente:

. . . . . .
type alu = record nro: integer;
nombre: string[6];
notas: array[1..4] of integer;
prome: real
end;
. . . . . .
var x , y , aux : alu ;
. . . . . .

numero, nombre, notas enteras de 4 parciales, promedio se denominan campos (field) del
registro y pueden ser de cualquier tipo, incluso record. Los campos pueden ser leidos
individualmente.

Supongamos en un momento del programa, el registro x contiene los siguientes datos

si en alguna parte del programa hago referencia a x, estoy refiriendo a todo el registro

275 e m i l i o 8 5 7 10 7.5

x . nro

x . nombre x . prome

x . notas x . notas [ 3 ]

Cualquiera de los datos ejemplificados puede utilizarse, por ejemplo, en una sentencia de
asignacin

aux := x

Problema: Leer los datos (numero, nombre, notas enteras de 4 parciales) de un cierto nmero de
alumnos (no se sabe cuantos, pero no son mas de 100) de un curso. Efectuar un listado

49
Algoritmos y Estructuras de Datos

program uncurso (input,output);


type alu = record nro:integer;
nombre:string[6];
notas:array[1..4]of integer;
prome:real
end;
var curso:array[1..100] of alu;aux:alu; i,j,cant,nume: integer; p: real;
begin cant:=0; read(nume);
while nume>0 do
begin cant:=cant+1; curso[cant].nro:=nume;
read(curso[cant].nombre); p:=0;
for i:=1 to 4 do begin read (curso[cant].notas[i]);
p:= p + curso[cant].notas[i]
end;
curso[cant].prome:= p/4; read(nume)
end;
for i:= 1 to cant-1 do
for j:= cant-1 downto i do
if curso[j].prome < curso[j+1].prome
then begin aux:= curso[j]; curso[j]:= curso[j+1];
curso[j+1]:= aux
end
else if curso[j].prome = curso[j+1].prome
then if curso[j].nombre > curso[j+1].nombre
then begin aux:= curso[j];
curso[j]:= curso[j+1];
curso[j+1]:= aux
end;
for i:= 1 to cant do
writeln(curso[i].nro, curso[i].nombre curso[i].prome)
end.

Aclaramos que sta no es la manera mas habitual de trabajar en casos como el anterior ya que:
- Los arreglos se trabajan en la memoria principal y luego de terminado el programa, sus
datos se pierden
- Los tamaos de los arreglos son fijos, por lo tanto debemos conocer el mismo de
antemano, o por lo menos la cantidad mxima de elementos a contener

Para casos similares lo mas prctico es trabajar con archivos.

A partir de la pgina siguiente entramos al tema Archivos. Se han incorporado muchos


temas. No significa que el alumno deba conocer en detalle, por ejemplo, altas, bajas,
modificaciones, etc. (temas que con seguridad vern con mas precisin y detalle mas
adelante en otras materias). El nico objeto de haberlos incluido es para que tengan una
buena cantidad de ejercicios de diferente caracter, lo que seguramente les permitir
comprender con mayor detalle el tema de tratamiento de archivos en Pascal.

51

You might also like