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.