Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ АЛГОРИТМИЗАЦИИ.doc
Скачиваний:
188
Добавлен:
16.03.2015
Размер:
1.82 Mб
Скачать

11. Комбинированные типы. Записи (Record)

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

Записи удобны при обработке взаимосвязанных однородных данных.

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

Объявить запись можно в разделе var и в разделе type. Для описания переменных типа «запись» используется зарезервированное слово record.

Полный формат объявления переменной типа «запись»:

type

<имя_типа> = record

имя_поля1 : тип;

имя_поля2 : тип;

имя_поляN: тип;

end;

var

<имя_записи> : <имя_типа>;

Краткий формат объявления переменной типа «запись»:

var

<имя_записи> : record

имя_поля1 : тип;

имя_поля 2 : тип;

имя_поля N: тип;

end;

Здесь, <имя_типа>, <имя_записи> и имя_поляN - правильные идентификаторы. В описании указывается идентификатор каждого поля и его тип.

Например, переменная "Клиенты" типа записи "Клиент":

{полный формат объявления переменной}

type

CLIENT = record // Клиент

family : string[20]; // Фамилия

name : string[10]; // Имя

patronymic : string[15]; // Отчество

year_birthday : integer; // Год рождения

address : string[30]; // Адрес

telephone : integer; // Телефон

end;

var

clients:CLIENT;

или {краткий формат объявления переменной}

var

CLIENT : record // Клиент

family : string[20]; // Фамилия

name : string[10]; // Имя

patronymic : string[15]; // Отчество

year_birthday : integer; // Год рождения

address : string[30]; // Адрес

telephone : integer; // Телефон

end;

Запись, описанная через var, называется «анонимной».

В Паскале различают:

  • записи с фиксированными частями и

  • записи с вариантами (с переменными частями).

11.1 Записи с фиксированными частями

Записи с фиксированными частями называются так, потому, что в различных ситуациях имеют одинаковую структуру.

Например, запись "Личная карточка студента" может быть описана с помощью записи с фиксированными частями:

type

student = record

family : string[20];

name : string[10];

patronymic : string[15];

year_birthday : integer;

number_of_group : integer; // Номер группы

Predmet1 : byte; // МатАнализ

Predmet2 : byte; // ИнжГрафика

Predmet3 : byte; // Химия

Predmet4 : byte; // Информатика

end;

Если поля несут одинаковую смысловую нагрузку, то их целесообразно объединить в отдельную структуру типа record.

Пример 11.1.

type student = record

family :string[20];

family : string[20];

name : string[10];

patronymic : string[15];

year_birthday : integer;

number_of_group : integer; // Номер групп

valuation = record // Оценки

Predmet1 : byte; // МатАнализ

Predmet2 : byte; // ИнжГрафика

Predmet3 : byte; // Химия

Predmet4 : byte; // Информатика

end;

end;

group = array[1..25] of student;

var

group1, group2 : group;

Пример 11.2.

type

valuation = record // Оценки

Predmet1 : byte; // МатАнализ

Predmet2 : byte; // ИнжГрафика

Predmet3 : byte; // Химия

Predmet4 : byte; // Информатика

end;

student = record

family : string[20];

name : string[10];

patronymic : string[15];

year_birthday : integer;

number_of_group : integer;

// Оценки за прошедший семестр

valuation_of_last_half_year : valuation;

end;

group = array[1..25] of student;

var

group1,group2 :group;

Переменные типа record могут участвовать в операторах присваивания, но никакие операции над ними не допускаются. Арифметические или какие-либо другие операции могут выполняться только над отдельными полями записи.

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

Например, Client.name := “Mary”; или

Group1[1].family := “Ivanov”;

Для вложенных полей приходиться продолжать уточнения.

Например,

Group2[2]. Valuation_of_last_half_year.Predmet1 := 5;