Використання типу – Запис
Записи дозволяють об’єднати під одним іменем дані різних типів. Це зручно для рішення різноманітних задач. Спочатку треба описати тип-запис за допомогою слова 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.