Конструкция записи, тип записи и переменная типа запись
Записи
Квалификаторы
Ранее упоминалось, что к элементу переменной сложного типа можно обратиться с помощью квалификатора следующим образом:
<доступ к элементу>::= <имя> [<квалификатор>].
Поскольку элемент переменной сложного типа сам может быть переменной сложного типа, может возникнуть необходимость обращения к элементу элемента. И так далее. Поэтому квалификатор определяется рекурсивно следующим образом:
<квалификатор>::=("["<список индексов>"]" | "."<имя поля> | "^"){<квалификатор>}.
Таким образом, квалификаторы могут быть трех видов. Первый вид уже описан в предыдущем разделе, он используется для доступа к элементам массивов, второй вид используется для доступа к элементам записей, третий вид используется для доступа к переменным, на которые указывает переменная типа указатель. Подробнее о квалификаторах доступа к элементам записи и доступа по указателю – в соответствующих подразделах.
Как следует из синтаксиса, за одним квалификатором может, при необходимости, следовать другой, что обеспечивает доступ к элементам переменных сколь угодно сложной структуры.
Запись – это переменная, состоящая из нескольких элементов (полей) данных разного типа.
Запись – удобный способ представления объектов реального мира в программе. Реальные объекты характеризуются набором атрибутов (признаков, свойств, характеристик), представляемых данными разного типа – числовыми и нечисловыми (качественные, идентификационные, логические). В записи все разнородные атрибуты, относящиеся к одному объекту, объединяются вместе. Таким образом, программист видит в своей программе объект реального мира как одно целое, но при этом у него есть возможность отдельного доступа к каждому из атрибутов каждого из объектов.
Синтаксис конструкции записи:
<конструкция записи>::="Record" <описание полей>";"<описание полей> "End".
<описание полей>::=<имя>{","имя} ":" (<имя типа>|<конструкция типа>).
Тип в описании полей может быть любым, кроме файлового. В одном описании может быть описано несколько полей одного типа. Поля разного типа описываются в разных описаниях полей. Имена полей должны быть уникальными в пределах записи.
Тип записи и переменные типа запись описываются так же, как любые другие типы и переменные, соответственно (см. Описание переменных и типов данных). Целесообразно вначале сконструировать тип записи и присвоить ему имя в разделе Type, а затем объявлять переменные соответствующего типа в разделе Var.
Пример. Разделы описаний типов и переменных:
Type Ch=Array [1..16] of Char;
Person=Record {данные о человеке}
Surname, {Два поля одного типа –}
Name:Ch; {фамилия и имя}
Gender:(Male, Female); {пол – муж./жен.}
Age:Integer {Возраст, лет}
End;
StudentR=Record {данные о студенте}
ID:Person; {личные данные}
ListNo, {номер по списку}
YearOfStudy,{год обучения (курс)}
YearOfEntry:Integer; {год поступления}
Scholarship,{стипендия}
MilitaryTraining, {военная подготовка}
Hostel: Boolean {общежитие}
End;
TeacherR=Record {данные о преподавателе}
ID:Person; {личные данные}
Faculty, {факультет}
Department: Ch {кафедра}
End;
GroupR=Record {Данные по группе}
Index: Ch; {Название/номер группы}
Curator: TeacherR; {Куратор группы}
Student: Array[1..30] of StudentR; {массив записей о студентах}
End;
Var AcademicGroup: Array [1..40] of GroupR; {массив академических групп}
Teacher: Array[1..60] of TeacherR; {массив преподавателей}
Dean:TeacherR; {декан}