Використання типу – Запис

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

Попередня стаття
Наступна стаття