Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
29_Ae1.doc
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
302.08 Кб
Скачать

19. Комбинированные типы данных

Комбинированные типы, как и регулярные типы, представляют собой правило формирования составных типов. В отличие от массивов, записи позволяют объединять значения РАЗЛИЧНЫХ типов и поэтому являются, видимо, наиболее гибким механизмом построения данных.

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

Комбинированный тип данных (записи)

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

type Point=RECORD

x,y: Real

END;

Dates=RECORD

day : 1..31;

mon : String[3];

year: 1..3000

END;

var p,r: Point;

dt: Dates;

20. Оператор with.

В операциях над записями оператор with удобно использовать

для краткого обращения к полям записи. В операторе with к полям

одной или более конкретных переменных типа запись можно обращать-

ся, используя только идентификаторы полей.

В операторе with сначала производится проверка каждой ссылки

на переменную, а именно: можно ли ее интерпретировать, как поле

записи. Если это так, то она всегда интерпретируется именно таким

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

with OrderDate do

if Month = 12 then

begin

Month := 1;

Year := Year + 1

end else

Month := Month + 1;

21 Записи с вариантами

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

< имя переменной-записи >.< имя поля >

Во втором случае идентификация немного усложняется:

< имя переменной-записи >.< имя варианта >.< имя поля >

Рассмотрим использование записей с вариантами на примере. Пусть требуется размещать на экране видеотерминала простые геометрические фигуры - круги, прямоугольники, треугольники. Для "базы данных", которая будет описывать состояние экрана, удобно представлять все фигуры однотипными записями. Для любой фигуры описание ее должно включать в себя координаты некоторой опорной точки (центра, правого верхнего угла, одной из вершин) и код цвета. Другие же параметры построения будут разными для разных фигур. Так для круга - радиус; для прямоугольника - длины непараллельных сторон; для треугольника - координаты двух других вершин.

Запись с вариантами для такой задачи в языке PASCAL выглядит, как:

type figure = record

fig_type : char; { тип фигуры }

x0, y0 : word; { координаты опорной точки }

color : byte; { цвет }

case fig_t : char of

'C': ( radius : word); { радиус окружности }

'R': (len1, len2 : word); { длины сторон прямоугольника }

'T': (x1,y1,x2,y2 : word); { координаты двух вершин }

end;

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