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.