Записи дозволяють об'єднати під одним іменем дані різних
типів. Це зручно для рішення різноманітних задач. Спочатку треба описати тип-запис
за допомогою слова Record:
Type Student=Record
FIO:String[30];
Rogd:Integer;
Zrist:Real;
Ocinku:Array[1..5] of Byte;
End;
Запис складається з окремих полів, кожне поле має свій
тип. Кількість полів необмежена, порядок їх проходження будь-який. Поле, в свою
чергу, може бути записом, для цього попередньо, описують відповідний тип,
наприклад:
Type
Data=Record
Rik : Integer;
Mis : 1..12;
Chislo : 1..31;
End;
Тепер на тип Data можна посилатись в інших записах, наприклад:
Rogd : Data;
Змінні типу „запис” описуються звичайним способом,
наприклад:
Var StudEK, StudMO : Student;
Для таких змінних компілятор розподілить пам’ять відповідно з проходженням
полів і їх типом. Щоб звернутися до якого-небудь поля, вживають складені імена,
перша частина яких — ім’я змінної, а друга — ім'я поля. Наприклад:
StudEK.Fio := 'Петренко A.M.';
Якщо поле є в свою чергу запис, то складене ім'я подовжується, наприклад:
StudEK.Rogd.Rik := 1975;
Втому випадку, коли поле — масив, є можливість звернутися до його окремого
елементу: StudEK.Ocinku[k].
Складені змінні вживають, як звичайні змінні в різних конструкціях
програми.
В одній програмі може бути декілька різних записів (без обмежень). Записи
можна об'єднувати в масив, наприклад:
Var Kurs1 : Array[l..25] of Student;
I в цьому випадку можна
звертатися до окремого запису або до конкретного поля якого-небудь запису, наприклад:
Kurs1[i];
Kurs1[i].FIO;
Kurs1[i].Rogd.Rik
Kurs1[i].Ocinku[k];
Щоб ввести або вивести запис, треба ввести/вивести відповідні поля, наприклад:
Readln(StudEK.Fio);
For i:=l to 5 do Read(StudEK.Ocinku[i]);
Writeln(StudEK.Fio);
For i:=l to 5 do write(StudEK.Ocinku[i]);
Для введення/виведення масиву записів використовують цикл.
Деяка незручність виникає в зв'язку з використанням довгих складених імен.
Конструкція With дозволяє в якійсь мірі зменшити її. Для
цього треба визначити область дії конструкції, наприклад:
With StudEK do
begin
.....
End;
В визначеній області замість довгого складеного вживають більш просте ім'я,
наприклад:
Readln(Fio);
For i:=1
to 5 do Read(Ocinku[i]);
Zrist := 180;
Якщо в програмі використовується декілька записів з однаковими іменами полів,
треба бути обережним з вживанням With, щоб не сталося плутанини.
В загальному випадку виділяють два види задач: обробка одиноких записів та
обробка масивів записів.
Перший вид зустрічається, наприклад, в інформаційно-довідкових системах,
коли вся інформація зберігається в файлі і треба одержати яку-небудь довідку,
наприклад, скільки в групі студентів вчиться на 4 та 5.
Для розв'язання такої задачі достатньо читати з файлу запис за записом і
аналізувати відповідне поле.
Масив записів вживають в тих випадках (хоча це не є
економне використання пам'яті), коли для розв'язування задачі треба мати в
пам'яті всі записи, наприклад, при сортуванні записів по якій-небудь ознаці
(середній бал успішності, зріст студентів, тощо).
Приклад. Вивести список студентів, що навчаються на 4 та
5.
Програма:
Type S=Record
FIO:String;
GR:Word;
GP:Word;
O:Array[1..3] of Byte;
End;
Var
a:Array[1..10] of S;
i,j,n:Byte;
B:Boolean;
Begin
Write('Kolichestvo students:');
Readln(n);
For i:=1 to n do
Begin
Writeln('Student-',i);
Write('Input FIO:');
Readln(a[i].FIO);
Write('Input god rogdenia:');
Readln(a[i].GR);
Write('Input god postuplenia:');
Readln(a[i].GP);
For j:=1 to 3 do
Begin
Write('Input ',j,' ocenku:');
ReadLn(a[i].O[j]);
End;
End;
For i:=1 to n do
Begin
B:=True;
For j:=1 to 3 do
If a[i].O[j]<4 Then B:=False;
If B=True Then Writeln(a[i].FIO:30);
End;
End.