Конструкция записи, тип записи и переменная типа запись

Записи

Квалификаторы

Ранее упоминалось, что к элементу переменной сложного типа можно обратиться с помощью квалификатора следующим образом:

<доступ к элементу>::= <имя> [<квалификатор>].

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

<квалификатор>::=("["<список индексов>"]" | "."<имя поля> | "^"){<квалификатор>}.

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

Как следует из синтаксиса, за одним квалификатором может, при необходимости, следовать другой, что обеспечивает доступ к элементам переменных сколь угодно сложной структуры.

Запись – это переменная, состоящая из нескольких элементов (полей) данных разного типа.

Запись – удобный способ представления объектов реального мира в программе. Реальные объекты характеризуются набором атрибутов (признаков, свойств, характеристик), представляемых данными разного типа – числовыми и нечисловыми (качественные, идентификационные, логические). В записи все разнородные атрибуты, относящиеся к одному объекту, объединяются вместе. Таким образом, программист видит в своей программе объект реального мира как одно целое, но при этом у него есть возможность отдельного доступа к каждому из атрибутов каждого из объектов.

Синтаксис конструкции записи:

<конструкция записи>::="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; {декан}