Var ім’я_змінної : record
Записи
Реальний світ насичений неоднорідними структурами даних. Прикладами таких структур можуть стати: календарна дата, що складається з номера дня, номера року та назви місяця, особова картка працівника (прізвище, адреса, дата народження, прибуток тощо), відомості про товар (назва товару, ціна, виробник, номер сертифікату якості).
Для представлення такої інформації використовується структура яка носить назву запис.
Характерні особливості запису:
1. компоненти, з яких вона складається, можуть бути різного типу; //головна відмінність від масиву
2. кожен компонент має ім’я.
Запис – це структурований тип даних, що являє об’єднання фіксованої кількості змінних одного або декількох типів.
Змінні, що входять до складу запису, називаються – полями. Ім’я поля має бути унікальними в межах одного запису.
Найчастіше запис оголошують розділі типів
type ім'я_типу = record
им’я_поля1:тип1;
им’я_поля2:тип2;
......................................................
им’я_поляN:типN;
end;
varім’я_змінної: ім'я_типу;
Розділ змінних
им’я_поля1:тип1;
им’я_поля2:тип2;
......................................................
им’я_поляN:типN;
end;
Приклад
type
date=record
day : 1..31;
month : string;
year : 1..2010;
end;
person=record
First_name : string;
last-name : string;
address : string;
birthday : date;
profit:real;
end;
produce=record
name : string;
price : real;
producer : string;
certification : integer;
end;
var d : date; man : person; item : produce;
Поле запису може бути будь-якого типу крім файлового.
Записи можна використовувати для створення типізованих констант.
Звернення до компонентів записів здійснюється через складене ім’я, що має такий синтаксис
ім’я_змінної . им’я_поля
В розділі згадувалось, що ім’я поля має бути унікальними в межах одного запису. Але слід зауважити, що імена полів різних записів можуть збігатися тому що доступ до компонентів здійснюється через складене ім’я. Якщо екземпляр деякого запису є полем іншого запису, то складені імена полів такого екземпляру міститимуть звернення до декілька полів.
type
date=record
day : 1..31;
month : string;
year : 1..2010;
end;
person=record
First_name : string;
last-name : string;
address : string;
birthday : date;
profit:real;
end;
var man : person; d:date;
begin
d.day:=22;
man. First_name:=’Ivanov’;
man. birthday. day:=12;
end.
Складність доступу до компонентів записів може бути зменшена, якщо використати конструкцію (оператор приєднання)
with ім’я_змінної do оператор;
type
date=record
day : 1..31;
month : string;
year : 1..2010;
end;
person=record
First_name : string;
last_name : string;
address : string;
birthday : date;
profit:real;
end;
var man : person; d:date;
begin
with d do
begin
day:=22;
end;
with man, birthday do
begin
man. First_name:='Ivanov';
man. birthday. day:=12;
end;
end.
Написать программу, выполняющую следующие действия:
1. Вводит данные о студентах, содержащие фамилию, группу, средний бал за семестр.
2. выводит на экран дисплея фамилии студентов: которые начинаются на букву 'S' и у которых самый высокий средний бал.
Хранится эта информация будет в массиве, каждый элемент которого – данные о студенте.
1 program N2;
2 {$APPTYPE CONSOLE}
3 uses SysUtils;
4 const n=3;
5 type student= record
6 name:string[20];
7 grup:string[5];
8 bal:real;
9 end;
10 var st:array [1..n]of student;
11 i,k:byte; max:real;
12 begin
13 writeln('Vvedite dannie o
studente');
14 For i:=1 to n do
15 with st[i] do
16 begin
17 writeln('Student N',i);
18 write('Vvedite name - ');
19 readln(name);
20 write('Vvedite grup - ');
21 readln(grup);
22 write('Vvedite bal - ');
23 readln(bal);
24 end;
25 writeln('Name studentov
nach c S:');
26 k:=0;
27 For i:=1 to n do
28 with st[i] do
29 if name[1]='S' then
30 begin
31 writeln(name);
32 k:=k+1;
33 end;
34 if k=0 then writeln('net');
35 writeln('Maximal sred bal: ');
36 max:=st[1].bal;
37 k:=1;
38 For i:=2 to n do
39 with st[i] do
40 if bal>max then
41 begin
42 max:=bal ;
43 k:=i
44 end;
45 writeln (st[k].name);
46 readln;readln
47 end.