DMarlon Studio

Lección 16 · 16 de 20

Registros (record) · Pascal

Agrupe datos relacionados en un record de Pascal: los productos de una papelería con nombre, precio y existencias, y funciones que los usan.

Pascal · Registros (record) en DMarlon Studio: el código del ejemplo y su salida en la terminal

Un `record` agrupa varios campos, de tipos distintos, en un tipo nuevo. Se declara en el bloque `type`: TProduct tiene Name, Price y Stock. Por costumbre, en Pascal los nombres de tipo empiezan por T.

A cada campo se llega con un punto: diary.Name := 'Diary'. MakeProduct es una función que devuelve un TProduct completo; dentro, Result.Name, Result.Price y Result.Stock rellenan sus campos.

Asignar un record copia todos sus campos: diary := book crea una copia independiente del cuaderno, y cambiarle el nombre no afecta a book, que sigue llamándose Notebook.

Un record se pasa a un procedimiento como cualquier otro valor. Show(const p: TProduct) lo recibe con const, sin copiarlo, y escribe sus campos en columnas con :10, :8:2 y :5. Con los campos también se calcula el valor de las existencias.

Código · main.pas

program main;type  TProduct = record    Name: String;    Price: Double;    Stock: Integer;  end;function MakeProduct(const name: String; price: Double; stock: Integer): TProduct;begin  Result.Name := name;  Result.Price := price;  Result.Stock := stock;end;procedure Show(const p: TProduct);begin  WriteLn(p.Name:10, p.Price:8:2, p.Stock:5);end;var  pen, book, diary: TProduct;begin  pen := MakeProduct('Pen', 1.20, 50);  book := MakeProduct('Notebook', 3.75, 12);  // Assigning a record copies every field.  diary := book;  diary.Name := 'Diary';  Show(pen);  Show(book);  Show(diary);  WriteLn('Stock value: ', pen.Price * pen.Stock + book.Price * book.Stock:0:2);end.

Salida · fpc main.pas && ./main

       Pen    1.20   50
  Notebook    3.75   12
     Diary    3.75   12
Stock value: 105.00

Para recordar

  • record ... end agrupa campos en un tipo nuevo.
  • Los campos se leen y se cambian con un punto: p.Price.
  • Asignar un record copia todos sus campos.
  • Las funciones pueden recibir y devolver records.

Ejercicio

Añada a TProduct un campo Category: String, rellénelo en MakeProduct y escríbalo en Show; después cree una goma de borrar de 0,60 euros con 80 unidades.