
Тип данных – запись

Запись – это структура данных, состоящая из фиксированного числа компонентов, которые называются полями. При этом поля могут быть разных типов.

Общий формат:
Type имя_типа = record
: тип поля 1;
: тип поля 2;
…
End;
где record – служебное слово, а и - правильные идентификаторы языка Паскаль.

Замечания:
1. При описании типа записи в блоке Type последняя ; перед словом end может быть опущена.
2. Уникальность имен полей требуется только внутри одной записи. Имена полей одной записи могут совпадать с именами полей в других записях.
3. Для присвоения полям конкретных значений используется оператор присваивания.

![Пример фрагмента программы описания записи Паскаля Type anketa = record fio: string[45]; pol: char; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3]; end;](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img5.jpg)
Пример фрагмента программы описания записи Паскаля
Type anketa = record fio: string[45]; pol: char; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3]; end;

![Type anketa1 = record fio: string[45]; pol: char; dat_r: record god: integer; mes: string[10]; den: 1..31; end; adres: record gorod: string[25]; ulica: string [20]; dom, kv: integer; end; curs: 1..5; grupp: string[3]; end;](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img7.jpg)
Type anketa1 = record fio: string[45]; pol: char; dat_r: record god: integer; mes: string[10]; den: 1..31; end; adres: record gorod: string[25]; ulica: string [20]; dom, kv: integer; end; curs: 1..5; grupp: string[3]; end;

var student: anketa; student1: anketa1;

.
Например, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя:
student.curs := 3;

Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен:
student1.dat_r.god := 1982;

Задача
Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран.
![program primer1; type anketa = record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3] end; var student: anketa; begin writeln (‘введите сведения о студенте’); {обратите внимание, ввод каждого поля осуществляется отдельно} writeln (‘введите фамилию, имя и отчество’); readln (student.fio);](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img12.jpg)
program primer1; type anketa = record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3] end; var student: anketa; begin writeln (‘введите сведения о студенте’); {обратите внимание, ввод каждого поля осуществляется отдельно} writeln (‘введите фамилию, имя и отчество’); readln (student.fio);

writeln (‘введите дату рождения’); readln (student.dat_r); writeln (‘введите адрес’); readln(student.adres); writeln (‘введите курс’); readln(student.curs); writeln (‘введите группу’); readln (student.grupp); writeln (‘ввод закончен’); writeln ; {обратите внимание, что вывод записи осуществляется по полям} writeln (‘фамилия студента: ’, student . fio ); writeln(‘ дата рождения : ’, student.dat_r); writeln(‘ адрес : ’, student.adres); writeln(‘ курс : ’, student.curs); writeln(‘ группа : ’, student.grupp); end.

А теперь слегка усложним задачу. Пусть нам необходимо иметь сведения о многих студентах, например, нашего факультета. Следовательно, необходимо организовать массив записей Паскаля. А затем из общего списка вывести фамилии студентов 2-го курса.
![program primer 2; type anketa = record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3] end; var student: array [1..100] of anketa; i: integer; begin {последовательно вводим каждую запись} for i := 1 to 100 do begin](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img15.jpg)
program primer 2; type anketa = record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3] end; var student: array [1..100] of anketa; i: integer; begin {последовательно вводим каждую запись} for i := 1 to 100 do begin
![writeln (‘введите сведения о’, i , ‘-м студенте’); writeln (‘введите фамилию, имя и отчество’); readln (student[i].fio); writeln (‘введите дату рождения’); readln (student[i].dat_r); writeln (‘введите адрес’); readln(student[i].adres); writeln (‘введите курс’); readln(student[i].curs); writeln (‘введите группу’); readln (student[i].grupp);](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img16.jpg)
writeln (‘введите сведения о’, i , ‘-м студенте’);
writeln (‘введите фамилию, имя и отчество’); readln (student[i].fio); writeln (‘введите дату рождения’); readln (student[i].dat_r); writeln (‘введите адрес’); readln(student[i].adres); writeln (‘введите курс’); readln(student[i].curs); writeln (‘введите группу’); readln (student[i].grupp);
![end; writeln (‘ввод закончен’); writeln ; {просматриваем массив записей и выбираем только студентов 2-го курса } for i:=1 to 100 do if student[i].curs = 2 then writeln(‘ фамилия студента : ’, student[i].fio); end.](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img17.jpg)
end; writeln (‘ввод закончен’); writeln ; {просматриваем массив записей и выбираем только студентов 2-го курса } for i:=1 to 100 do if student[i].curs = 2 then writeln(‘ фамилия студента : ’, student[i].fio); end.

Оператор присоединения with
Префикс – обязательная предшествующая часть составного идентификатора для имен полей в структуре типа запись Паскаля.
with do
;
![for i:=1 to 100 do with student[i] do begin writeln (‘введите сведения о’, i , ‘-м студенте’); writeln (‘введите фамилию, имя и отчество’); readln (fio); writeln (‘введите дату рождения’); readln (dat_r); writeln (‘введите адрес’); readln(adres); writeln (‘введите курс’); readln(curs); writeln (‘введите группу’); readln (grupp); end;](https://fsd.videouroki.net/html/2023/08/23/v_64e5f097d8dd0/img19.jpg)
for i:=1 to 100 do with student[i] do begin writeln (‘введите сведения о’, i , ‘-м студенте’); writeln (‘введите фамилию, имя и отчество’); readln (fio); writeln (‘введите дату рождения’); readln (dat_r); writeln (‘введите адрес’); readln(adres); writeln (‘введите курс’); readln(curs); writeln (‘введите группу’); readln (grupp); end;

Домашнее задание:
Пользователь вводит дату рождения. Написать программу, которая выдает пользователю день недели, в который он родился. Для даты рождения использовать запись.