Запись в Паскале представляет собой совокупность определенного числа компонент, имеющих одинаковые или различные типы данных. Эти компоненты называются полями и обладают именем и типом. Также как и массивы, поля в записи могут быть любого (за исключением файлового) типа данных. Структура записи характеризуется служебным словом Record и имеет такой вид:
Type <имя типа> = Record
<поле 1>: <тип>;
<поле 2>: <тип>;
…
<поле n>: <тип>;
End;
Var <имя переменой> : <имя типа>;
Как видно, после определения каждого поля ставиться точка с запятой, а сама запись заканчивается словом End.
Вероятно, читатель заметил, что записи в Паскаль, по сути, являются некими базами данных. А так как последние предназначены для хранения структурированной информации, то записи, как правило, применяются для аналогичных целей. Составим собственную запись, в которой будет храниться информация о музыкальных группах:
1
2 3 4 5 6 7 |
Type Mgroups = Record
Name: string[50]; {название группы} Country: string[30]; {страна} Year_found: integer; {год основания} Style: string[30]; {жанр} End; Var Group: Mgroups; |
Переменная Group имеет тип записи созданной в разделе описания типов. Теперь она может работать с полями записи Mgroups. Для этого нужно указать имя переменной и через точку имя необходимой записи, например Group.Name. Допустим, стоит задача записать в компоненту Group.Style жанр под названием Grunge, поступим следующим образом:
Group.Style:=’Grunge’;
Как видите, присваивание значений переменным типа запись выполняется стандартным способом.
В выше изложенном фрагменте кода, мы использовали обычную переменную, способную принять лишь одно значение за раз. Записи же обычно используются для нескольких «слоев» данных, поэтому удобно использовать массив записей. Сделаем переменную Group массивом записей:
Var Group: array[1..2] of Mgroups;
Теперь мы можем сделать программу, которая будет обрабатывать характеристики двух музыкальных групп:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
program recording;
uses crt; type Mgroups = Record Name: string[50]; {название группы} Country: string[30]; {страна} Year_found: integer; {год основания} Style: string[30]; {жанр} end; Var i: integer; Group: array[1..2] of Mgroups; begin for i:=1 to 2 do begin write(‘Название группы: ‘); readln(Group[i].Name); write(‘Страна: ‘); readln(Group[i].Country); write(‘Год основания: ‘); readln(Group[i].Year_found); write(‘Жанр: ‘); readln(Group[i].Style); end; for i:=1 to 2 do begin writeln(Group[i].Name); writeln(Group[i].Country); writeln(Group[i].Year_found); writeln(Group[i].Style); writeln; end; end. |
Эта программа всего лишь записывает вводимые пользователем данные и выводит их. Место занято много, а толку чуть! Первое можно немного исправить с помощью оператора присоединения With. Его форма записи:
With <имя переменной типа Record> Do оператор;
Перепишем последнюю программу, воспользовавшись оператором With.
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
program recording;
uses crt; type Mgroups = Record Name: string[50]; {название группы} Country: string[30]; {страна} Year_found: integer; {год основания} Style: string[30]; {жанр} end; Var i: integer; Group: array[1..2] of Mgroups; begin for i:=1 to 2 do with group[i] do begin write(‘Название группы: ‘); readln(Name); write(‘Страна: ‘); readln(Country); write(‘Год основания: ‘); readln(Year_found); write(‘Жанр: ‘); readln(Style); end; for i:=1 to 2 do with group[i] do begin writeln(Name); writeln(Country); writeln(Year_found); writeln(Style); writeln; end; end. |
Несмотря на прибавление строчек кода, появилась возможность указывать лишь поля. Может в данном примере не слишком заметен эффект оператора присоединения, но по мере увеличения составляющих записи его роль будет только возрастать.
При работе с записями их поля можно определить типом Record, тогда получиться вложенная запись. Добавим к полю записи Mgroups три новых поля:
1
2 3 4 5 6 7 8 9 10 11 |
Type Mgroups = Record
Name: Record {название группы} Vocals: string; Guitar: string; Drums: string; end; Country: string[30]; {страна} Year_found: integer; {год основания} Style: string[30]; {жанр} end; Var Group: array[1..2] of Mgroups; |
Теперь для работы, например с полем Vocals нужно перед ним указать запись Name, а также массив Group, если не используется оператор With: Group[i].Name.vocals.