Hemos visto anteriormente que un procedimiento o función puede recibir tipos de datos simples como Integer, Char, Double, String etc. estructuras de datos tipo vector, matriz y también pueden ser de tipo registro.
Recordar que es muy importante definir si el parámetro es por valor (solo se consulta el parámetro) o referencia (se modifica el parámetro)
Se tiene la siguiente declaración de registro:
TProducto = record
Codigo: Integer;
Descripcion: String;
Precio: Double;
End;
Definir dos variables de tipo TProducto.
Plantear un procedimiento que cargue una variable de tipo TProducto y otro que lo imprima.
program Proyecto115;
{$APPTYPE CONSOLE}
type
TProducto = record
Codigo: Integer;
Descripcion: String;
Precio: Double;
End;
procedure Cargar(var Producto: TProducto);
begin
Write('Ingrese el código del producto:');
ReadLn(Producto.Codigo);
Write('Ingrese el nombre del producto:');
ReadLn(Producto.Descripcion);
Write('Ingrese el precio:');
ReadLn(Producto.Precio);
end;
procedure Imprimir(Producto: TProducto);
begin
WriteLn('************************************');
WriteLn('Codigo:', Producto.Codigo);
WriteLn('Descripcion:', Producto.Descripcion);
WriteLn('Precio:', Producto.Precio:0:2);
WriteLn('************************************');
end;
var
Producto1: TProducto;
Producto2: TProducto;
begin
Cargar(Producto1);
Cargar(Producto2);
Imprimir(Producto1);
Imprimir(Producto2);
ReadLn;
end.
Como se necesitan almacenar los datos de dos productos debemos definir previo al bloque principal del programa dos variables de tipo TProducto:
var Producto1: TProducto; Producto2: TProducto; begin Cargar(Producto1); Cargar(Producto2); Imprimir(Producto1); Imprimir(Producto2); ReadLn; end.
Se plantea un solo procedimiento que permite cargar por teclado variables de tipo TProducto, luego desde el bloque principal lo llamamos dos veces pasando en forma sucesiva las variables a cargar. En la carga el parámetro debe ser por referencia (var Producto: TProducto):
procedure Cargar(var Producto: TProducto);
begin
Write('Ingrese el código del producto:');
ReadLn(Producto.Codigo);
Write('Ingrese el nombre del producto:');
ReadLn(Producto.Descripcion);
Write('Ingrese el precio:');
ReadLn(Producto.Precio);
end;
La impresión del registro se hace en el procedimiento "Imprimir" que recibe por valor un parámetro de tipo TProducto:
procedure Imprimir(Producto: TProducto);
begin
WriteLn('************************************');
WriteLn('Codigo:', Producto.Codigo);
WriteLn('Descripcion:', Producto.Descripcion);
WriteLn('Precio:', Producto.Precio:0:2);
WriteLn('************************************');
end;
TPais = record
Nombre: String;
Cantidad: Integer;
end;
Definir dos variables de tipo TPais en el bloque principal.
program Proyecto116;
{$APPTYPE CONSOLE}
type
TPais = record
Nombre: String;
Cantidad: Integer;
end;
procedure Cargar(Var Pais: TPais);
begin
Write('Ingrese el nombre del pais:');
ReadLn(Pais.Nombre);
Write('Ingrese la cantidad de habitantes:');
ReadLn(Pais.Cantidad);
end;
procedure MasHabitantes(Pais1, Pais2: TPais);
begin
if Pais1.Cantidad > Pais2.Cantidad then
begin
WriteLn(Pais1.Nombre, ' tiene más habitantes');
end
else
begin
WriteLn(Pais2.Nombre, ' tiene más habitantes');
end;
end;
var
Pais1: TPais;
Pais2: TPais;
begin
Cargar(Pais1);
Cargar(Pais2);
MasHabitantes(Pais1, Pais2);
ReadLn;
end.