Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria 158783 .doc
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
1.72 Mб
Скачать

Раздел 3.Записи Структура записи

Записи называют еще комбинированным типом данных или типом Record.

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

Компоненты записей называются полями. На тип поля записи никаких ограничений не накладывается, поэтому компонентой записи может быть тоже запись. В этом случае говорят об иерархической записи. Уровень иерархии (вложенности) не должен превышать 9.

Пример простой (не иерархической) записи – представление комплексного числа a + b*i – содержит Рисунок 3 .20.

Рисунок 3.20 – Пример неиерархической записи

Пример иерархической записи Anketa представляет Рисунок 3 .21.

Cинтаксис задания структуры данных типа запись имеет вид, который иллюстрирует Рисунок 3 .22

Список полей определяется с помощью синтаксической диаграммы, которую содержит Рисунок 3 .23.

Из синтаксической диаграммы (см. Рисунок 3 .23) видно, что запись может состоять из общей части и вариантной части. Любая из этих частей является необязательной.

Рисунок 3.21 - Пример иерархической записи Anketa

Рисунок 3.22 – Cинтаксическая диаграмма задания данных типа запись

Рисунок 3.23 – Синтаксическая диаграмма списка полей

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

Записи без вариантной части

Такие записи содержат только общую часть.

Cинтаксис задания общей части записи имеет вид, который содержит Рисунок 3 .24.

Рисунок 3.24 – Синтаксическая диаграмма задания общей части записи

Каждому полю записи дается свое имя и задается тип значения этого поля.

Пример 3.1.

Объявление записи, структуру которой представляет Рисунок 3 .20.

Type

Komplex = Record

Re: Real;

Im: Real

End;

или эквивалентно

Type

Komplex = Record

Re, Im: Real;

End;

В разделе Var необходимо ввести переменные типа Komplex:

Var

X, Y: Komplex;

Тип поля записи может быть определен двумя способами: непосредственно задан в описании записи или описан предварительно. В последнем случае указывается имя типа.

Пример 3.2.

Объявление записи, структуру которой представляет Рисунок 3 .21.

Type

Data = Record

God: 1900..2000;

Mes: (Jn, Fb, Mr, Ap, Ma, Jn, Jl, Ag, Sp, Oc, Nv, Dc);

Den: 1..31

End;

Anketa = Record

Fio: Record

Fam: String [20];

Im: String [10];

Ot: String [20]

End;

Pol: (Man,Woman);

Data_R: Data;

Prof: String [20]

End;

В разделе Var необходимо ввести переменную типа Anketa:

Var

An1, An2: Anketa;

D1, D2: Data;

Объем памяти необходимый для записи, складывается из длин полей нижнего уровня.

Переменная, имеющая тип записи верхнего уровня, называется полной переменной.

Обращение к значению поля осуществляется с помощью идентификатора полной переменной, идентификаторов всех полей (с учетом их иерархии), в состав которых входит поле, и имени данного поля, разделенных точкой. Такое имя называется составным именем.

Например, применительно к примерам 3.1 и 3.2, An1, An2, X, Y – это полные переменные (полные имена). Составные имена записываются следующим образом: X.Re, X.Im, An1.Pol, An1.Fio.Fam, An1.Data_R.God и т.д.

Для полных переменных одного и того же комбинированного типа существует только одна операция – операция присваивания (в качестве выражения в правой части оператора присваивания может быть использована только переменная того же типа запись). Например, для примеров 3.1, 3.2 можно записать:

X := Y;

An1 := An2;

К этому моменту записи Y, An2 уже должны быть определены.

Составное имя может использоваться везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания или ввода.

Пример 3.3.

Присвоение значений полям переменной D1 (к примеру 3.2).

D1.God := 1970;

D1.Mes := Jn;

D1.Den := 15;

Для определения значения полной переменной необходимо присвоить значения всем полям, образующим это значение.

Составные имена можно использовать в операторах ввода-вывода. Например:

Read (D1.God, D1.Den);

Write (A1.Fio.Fam);

Зачастую удобно пользоваться массивами из записей.

Например, применительно к примеру 3.2 может быть объявлен следующий массив:

Var

Spisok: Array [1..100] Of Anketa;

Такое объединение позволяет хранить анкетные данные на 100 человек, выделять и обрабатывать из них нужные. Например, можно вывести значения необходимых полей записи:

For I:=1 To 100 Do

Writeln (Spisok [I].Fio.Fam, Spisok [I].Fio.Im, Spisok [I].Fio.Ot)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]