Hemos trabajado bastante con la estructura de datos tipo vector y matriz definiendo elementos de tipo Integer, Double, String etc. Ahora veremos que podemos definir vectores cuyos elementos sean de tipo registro.
La combinación de las distintas estructuras de datos nos permiten representar conceptos más complejos para la resolución de problemas.
Se tiene la siguiente declaración de registro:
TProducto = record Codigo: Integer; Descripcion: String; Precio: Double; end;Declarar un vector de 4 elementos de tipo TProducto.
program Proyecto120; {$APPTYPE CONSOLE} type TProducto = record Codigo: Integer; Descripcion: String; Precio: Double; end; TProductos = array[1..4] of TProducto; procedure Cargar(var Productos: TProductos); var f: Integer; begin for f:=1 to 4 do begin Write('Ingrese código del producto:'); ReadLn(Productos[f].Codigo); Write('Ingrese la descripción:'); ReadLn(Productos[f].Descripcion); Write('Ingrese el precio:'); ReadLn(Productos[f].Precio); end; end; procedure Listar(Productos: TProductos); var f: Integer; begin WriteLn('Listado completo de productos'); for f:=1 to 4 do begin WriteLn('Código:', Productos[f].Codigo); WriteLn('Descripción:', Productos[f].Descripcion); WriteLn('Precio:', Productos[f].Precio:0:2); WriteLn('----------------------------------------'); end; end; procedure ProductoPrecioMayor(Productos: TProductos); var f: Integer; pre: Double; nombre: String; begin pre := Productos[1].Precio; nombre := Productos[1].Descripcion; for f:=2 to 4 do begin if productos[f].Precio > pre then begin pre := Productos[f].Precio; nombre := Productos[f].Descripcion; end; end; WriteLn('El prducto ', nombre, ' tiene un precio mayor y es de ', pre:0:2); end; var Productos: TProductos; begin Cargar(Productos); Listar(Productos); ProductoPrecioMayor(Productos); ReadLn; end.
En el bloque principal definimos un vector de tipo TProductos, llamamos a los distintos procedimientos:
var Productos: TProductos; begin Cargar(Productos); Listar(Productos); ProductoPrecioMayor(Productos); ReadLn; end.
En el procedimiento de "Cargar" se recibe por referencia el vector ya que se va a modificar su contenido. Para cargar debemos indicar el nombre del vector, el subíndice que queremos acceder y finalmente a que campo del registro de dicha componente:
procedure Cargar(var Productos: TProductos); var f: Integer; begin for f:=1 to 4 do begin Write('Ingrese código del producto:'); ReadLn(Productos[f].Codigo); Write('Ingrese la descripción:'); ReadLn(Productos[f].Descripcion); Write('Ingrese el precio:'); ReadLn(Productos[f].Precio); end; end;
Como podemos comprobar en los otros dos procedimientos cada vez que accedemos a una componente del vector debemos indicar a que campo del registro queremos cargar, imprimir o consultar su valor.
TLibro = record Codigo: Integer; Titulo: String; Autor: String; end;Declarar y definir un vector de cuatro elementos de tipo TLibro.
program Proyecto121; {$APPTYPE CONSOLE} type TLibro = record Codigo: Integer; Titulo: String; Autor: String; end; TLibros = array[1..4] of TLibro; procedure Cargar(var Libros: TLibros); var f: Integer; begin for f:=1 to 4 do begin Write('Ingrese el código del libro:'); ReadLn(Libros[f].Codigo); Write('Ingrese el título:'); ReadLn(Libros[f].Titulo); Write('Ingrese el autor:'); ReadLn(Libros[f].Autor); end; end; procedure Listar(Libros: TLibros); var f: Integer; begin WriteLn('--------------------------------'); for f:=1 to 4 do begin WriteLn('Código:', Libros[f].Codigo); WriteLn('Título:', Libros[f].Titulo); WriteLn('Autor:', Libros[f].Autor); end; WriteLn('--------------------------------'); end; procedure ConsultaAutor(Libros: TLibros); var f: Integer; autor: String; existe: Integer; begin existe := 0; Write('Ingrese el autor a consultar:'); ReadLn(autor); for f:=1 to 4 do begin if autor = Libros[f].Autor then begin existe := 1; WriteLn('Título:', Libros[f].Titulo); end; end; if existe = 0 then begin WriteLn('No existen libros para el autor ingresado'); end; end; var Libros: TLibros; begin Cargar(Libros); Listar(Libros); ConsultaAutor(Libros); ReadLn; end.