Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник заданий по T-Pascal.doc
Скачиваний:
64
Добавлен:
18.03.2015
Размер:
3.03 Mб
Скачать

6 Записи

6.1 Понятие записи

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

Записный тип данных предоставляет программисту возможность объединить в одну связанную структуру различные по типу и смыслу элементы. Элементами записи могут быть и структурированные типы данных, например массивы и другие подчиненные записи. Для обработки доступна как вся запись целиком, так и отдельные ее поля.

Понятие записи рассмотрим на примере ведомости списка учащихся с их оценками.

Ф И О

ОЦЕНКИ

1

2

Елисеев О.Д.

Кошкин О.А.

5

3


Каждая строка в этой ведомости состоит из отдельных элементов данных различного типа:

а) порядковый номер - целое десятичное число;

б) Фамилия И. О. - массив символов;

в) оценки - массив целых чисел.

Эти данные можно объединить в одну группу и считать записью. Введем следующие обозначения: В - имя всей записи; п -, порядковый номер; fio -фамилия, имя, отчество; mark - оценки.

Обращение к элементу записи в программе выполняется с помощью уточненного (составного) имени. Уточненное имя содержит имя записи и имя элемента и записывается в следующем виде:

имя записи имя элемента.

Записи, как и другие данные, объявляются в разделе описаний и используются в разделе операторов.

Структура объявления типа записи такова:

<имя типа> = record <список полей> end

Здесь <имя типа> - правильный идентификатор; record, end -зарезервированные слова (запись, конец); <список полей> - последователь­ность разделов записи, между которыми ставится точка с запятой. Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей).

Общий вид описания типа Record

TYPE

T=Record

ID11, ID12, …, ID1n : Type1;

ID21, ID22, …, ID2n : Type2;

ID31, ID32, …, ID1n : Type3;

IDk1, IDk2, …, IDkn : Typek

End;

Где Idij – идентификаторы полей;

Type i – тип полей;

T – имя поля.

Для представленной ведомости объявление записи выглядит следующим образом:

type list = record n : integer;

fio : array [1..'!0] of Char;

mark : array [1..3] of integer end;

var В : list;

Возможно объявление записи в разделе переменных:

var В : record n : integer;

fio : array [1..20] of char;

mark : array [1..3] of integer end;

Элемент записи используется в программе в том же самом смысле, как

и обычная переменная. Элемент записи можно указывать как в левой

части оператора присваивания, так и в выражениях. Над элементом

записи можно выполнять действия, допустимые для данных его типа.

Если тип элемента записи - целый, то выполняются все операции,

допустимые для целых данных. Для рассмотренной ведомости над элементами записи можно произвести, например, следующие операции:

порядковому номеру n записи В присвоить значение 2:

В.п := 2;

найти сумму трех оценок:

s := B mark [1] + В.mark [2] + B mark [3];

ввести значения порядкового номера:

read (B.n).

Обращение к записи в целом, а не только к ее элементам, допускается

лишь в операторе присваивания. Слева и справа от знака присваивания при этом должны использоваться имена записей одинакового типа.

Объявим тип birthday, содержащий три поля с именами day, month и year;

переменные а и b содержат записи типа birthday; с - запись, содержащая в качестве элемента подчиненную запись.

type

birthday = record

day.month : byte;

year : word

end;

var a,b : birthday;

с : record

name : string;

bd : birthday end;

В этом случае возможно а := b; a.day>:= 27; b.year := 1939; для вложенных

полей необходимо продолжать уточнения: c.bd.year, c.bd.day, с.bd.month.