Registros (record) en Pascal

Un registro es una estructura que consiste de un número fijo de componentes llamados campos. Los campos pueden ser de diferentes tipos y deben tener un identificador de campo.

La definición de un tipo registro debe consistir de la palabra reservada record, seguida de una lista de campos y terminada por el identificador reservado end.

formato:

type
 tipo_reg= record
                 lista id1:tipo 1;lista id2:tipo 2;.
                          .
                          .lista idn:tipo n
             end;      

tipo_reg nombre de la estructura o dato registro lista id lista de uno o más nombres de campos separados por comas tipo puede ser cualquier tipo de dato estándar o definido por el usuario

Ejemplo:

Type 
  registro_empleado =Record 
                        nombre    : string[30] ; profesion:string[20] ;puesto:string[20] ;sueldo:real
                      end; 

Un registro puede representarse gráficamente en función de sus campos.

El registro como un todo tiene el nombre registro_empleado. Este nuevo tipo que se acaba de definir puede utilizarse en la sección Var, para declarar variables como por ejemplo:

Var
empleado : registro_empleado;

Para asignar valores a cada campo del registro empleado, puede procederse de la siguiente manera:

.......................
.......................
....................... 
empleado.nombre  :='MENDEZ CARLOS';empleado.profesion :='INGENIERO';empleado.puesto  :='DIRECTOR';empleado.sueldo :=5000.00; 
.......................
.......................
.......................

Para simplificar la notación de los registros, se pueden utilizar instrucciones With Do.

Por ejemplo, la instrucción:

WriteLn(empleado.nombre:35,
        empleado.puesto:25,
        empleado.sueldo:15:0);

puede escribirse:

With empleado Do
WriteLn(nombre:35,puesto:25,sueldo:15:0);

Asimismo, para leer datos usamos:

With empleado Do
begin
 Write('NOMBRE : ');
  ReadLn(nombre); 
  Write('PROFESION : ');
  ReadLn(profesion);
  Write('PUESTO : ');
  ReadLn(puesto);
  Write('SUELDO MENSUAL : ');
  ReadLn(sueldo)
end;

Obsérvese el siguiente segmento de programa:

..............................
..............................
.............................. 
Type
 fecha = Recordanio : 1900..1989 ;
           mes  : 1..12 ;
           dia  : 1..31end;
 datos = Recordnombre        : string[30] ;
           sueldo        : real ;
           fecha_ingreso : fechaend; 
Var
  personal :datos ;
  ...............................
  ...............................
  ............................... 

La asignación del valor 15 al campo dia del registro personal se hace de la siguiente manera:

personal.fecha_ingreso.dia := 15 ; 

donde:

personal.fecha_ingreso 

hace referencia al campo fecha_ingreso del registro personal, mientras que:

dia 

se refiere al campo dia del campo fecha_ingreso, que a su vez es un registro de tipofecha.

Usando la forma With Do quedaría:

With personal Do With fecha_ingreso Do
  dia := 15 ; 

que es equivalente a:

With personal, fecha_ingreso Do
  dia := 15 ;

o también a:

with personal Do
 with fecha_ingreso Do
   dia:=15;

Ejemplo:

ProgramRegistro;
   {EL siguiente programa captura 10 empleados y sus
   datos personales en un arreglo con la utilización de
   registros}Uses Crt;
ConstMaxEmpleados=10;
Typeregistro_empleado = Recordnombre    : string[30];
                        profesion : string[20];
                        puesto    : string[20];
                        sueldo    : realend;
Var
registro  : registro_empleado;
  empleado  :array[1..MaxEmpleados] ofregistro_empleado;
  i,col,ren :byte;
beginClrScr;
  Write('    Nombre            Profesión          Puesto            Sueldo');
  col:=1;ren:=2;
  fori:=1to MaxEmpleadosdo beginWithregistrodobegingotoxy(col,ren);
         ReadLn(empleado[i].nombre);
         gotoxy(col+21,ren);
         ReadLn(empleado[i].profesion);
         gotoxy(col+40,ren);
         ReadLn(empleado[i].puesto);
         gotoxy(col+59,ren);
         ReadLn(empleado[i].sueldo);
         inc(ren);
         col:=1;
       endend;
  ReadKeyend.