Un registro es una estructura de datos que permite almacenar un conjunto de elementos no necesariamente del mismo tipo.
Vimos que vectores y matrices son estructuras de datos que permiten almacenar un conjunto de datos del mismo tipo.
Un registro normalmente almacena un conjunto de datos que están relacionados entre si.
Ejemplos de registros podrían ser los datos de un alumno (nro de legajo, apellido y nombre, carrera que cursa), una historia clínica de un paciente (nro de documento, obra social que tiene, enfermedades), etc.
A un vector o matriz accedemos a sus elementos por medio de subíndices, a los elementos de un registro se los llama campos y tienen cada uno un nombre.
Por ejemplo si definimos el registro "producto" sus campos pueden ser el "codigo","descripcion" y "precio".
Como los vectores y matrices los registros deben declararse y luego definir variables de dicho tipo.
Veamos la sintaxis para declarar un registro en Delphi/Pascal en la zona de la type:
TProducto = record Codigo: Integer; Descripcion: String; Precio: Double; end;
Hemos declarado un registro llamado "TProducto" con tres campos uno de tipo Integer llamado Codigo, otro de tipo String llamado Descripcion y finalmente el campo Precio de tipo Double.
Como vemos los tres campos están relacionados y hacen referencia a las características que puede tener todo producto que vende una empresa.
Pero si solo declaramos el registro no nos sirve de nada, debemos definir una o más variables de dicho tipo a semejanza como hemos trabajado con vectores y matrices.
Declarar un registro que permita almacenar el codigo, descripcion y precio de un producto. Luego definir dos variables de dicho tipo, cargarlas e imprimir el nombre del producto que tiene mayor precio.
program Proyecto113; {$APPTYPE CONSOLE} type TProducto = record Codigo: Integer; Descripcion: String; Precio: Double; end; var Producto1: TProducto; Producto2: TProducto; begin WriteLn('Datos del primeer producto'); Write('Ingrese el código del producto:'); ReadLn(Producto1.Codigo); Write('Ingrese el nombre del producto:'); ReadLn(Producto1.Descripcion); Write('Ingrese el precio:'); ReadLn(Producto1.Precio); WriteLn('Datos del segundo producto'); Write('Ingrese el código del producto:'); ReadLn(Producto2.Codigo); Write('Ingrese el nombre del producto:'); ReadLn(Producto2.Descripcion); Write('Ingrese el precio:'); ReadLn(Producto2.Precio); if Producto1.Precio > Producto2.Precio then begin WriteLn('El producto ', Producto1.Descripcion, ' tiene un precio mayor'); end else begin WriteLn('El producto ', Producto2.Descripcion, ' tiene un precio mayor'); end; ReadLn; end.
La declaración del registro se hace en la zona de la type:
type TProducto = record Codigo: Integer; Descripcion: String; Precio: Double; end;
Para definir variables de tipo TProducto lo hacemos en la zona de la var:
var Producto1: TProducto; Producto2: TProducto;
Estamos definiendo dos variables llamadas Producto1 y Producto2 de tipo TProducto.
Cada una de las variables Producto1 y Producto2 reserva espacio para almacenar tres campos cada una:
Para cargar la variable Producto1 debemos hacerlo campo a campo:
Write('Ingrese el código del producto:'); ReadLn(Producto1.Codigo); Write('Ingrese el nombre del producto:'); ReadLn(Producto1.Descripcion); Write('Ingrese el precio:'); ReadLn(Producto1.Precio);
El procedimiento ReadLn no permite cargar todo un registro de una vez.
Es decir primero indicamos el nombre de la variable "Producto1" y seguidamente el campo que estamos cargando "Codigo"
La carga del segundo registro llamado "Producto2" es idéntico a la carga del primer registro:
Write('Ingrese el código del producto:'); ReadLn(Producto2.Codigo); Write('Ingrese el nombre del producto:'); ReadLn(Producto2.Descripcion); Write('Ingrese el precio:'); ReadLn(Producto2.Precio);
Para verificar cual de los dos productos tiene un precio mayor debemos acceder al campo precio de cada uno de los dos productos:
if Producto1.Precio > Producto2.Precio then
Lo mismo cuando procedemos a imprimir por pantalla debemos indicar que campo debemos mostrar y no podemos pasar el registro completo:
WriteLn('El producto ', Producto1.Descripcion, ' tiene un precio mayor');
TPais = record Nombre: String; Cantidad: Integer; end;Definir tres variables de tipo TPais y almacenar los nombres de los países y la cantidad de habitantes de dichos países.
program Proyecto114; {$APPTYPE CONSOLE} type TPais = record Nombre: String; Cantidad: Integer; end; var Pais1: TPais; Pais2: TPais; Pais3: TPais; begin WriteLn('Datos del primer pais'); Write('Ingrese el nombre del pais:'); ReadLn(Pais1.Nombre); Write('Ingrese la cantidad de habitantes:'); ReadLn(Pais1.Cantidad); WriteLn('Datos del segundo pais'); Write('Ingrese el nombre del pais:'); ReadLn(Pais2.Nombre); Write('Ingrese la cantidad de habitantes:'); ReadLn(Pais2.Cantidad); WriteLn('Datos del tercer pais'); Write('Ingrese el nombre del pais:'); ReadLn(Pais3.Nombre); Write('Ingrese la cantidad de habitantes:'); ReadLn(Pais3.Cantidad); if (Pais1.Cantidad > Pais2.Cantidad) and (Pais1.Cantidad > Pais3.Cantidad) then begin WriteLn(Pais1.Nombre,' es el país con mayor cantidad de habitantes'); end else begin if Pais2.Cantidad > Pais3.Cantidad then begin WriteLn(Pais2.Nombre,' es el país con mayor cantidad de habitantes'); end else begin WriteLn(Pais3.Nombre,' es el país con mayor cantidad de habitantes'); end; end; ReadLn; end.