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

Операции над записями

Важнейшей операцией для записи является операция доступа к выбранному полю записи — операция квалификации. Доступ к полям отдельной записи осуществляется через имя переменной и имя поля.

Практически во всех языках программирования обозначение этой операции имеет вид:

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

zapis.pole_1; zapis.pole_2;

z1.pole_1_1; z1.pole_1_2;

z2.pole_2_1; z2.pole_2_3.pole_1_1; z2.pole_2_3.pole_1_2;

Students[1].num; Students[1].facult; Students[1].ocenki.math;….

При работе с полями записи возможно использование конструкции присоединения:

with <имя переменной-записи> do

begin

<список операторов>;

end;

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

with Students[1] do

begin

Readln(num);

ocenki.math:=0;

...

end;

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

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

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

Обработка таких объектов производится по одним и тем же алгоритмам, если обрабатываются общие свойства объектов, или по разным — если обрабатываются специфические свойства.

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

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

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

Общий вид записи с вариантной частью:

<имя типа> = record

<список общих полей>

case <ключ выбора> : <тип ключа> of

<константа выбора 1> : (<список полей>) ;

<конст-та выбора 2> : (<список полей>) ;

...

<конст-та выбора N> : (<список полей>)

end;

Замечания: При использовании вариантной части, следует придерживаться следующих правил:

  • вариантная часть в записи может быть только одна и размещается за всеми фиксированными полями;

  • в качестве ключа выбора необходимо указывать переменную порядкового типа;

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

  • в вариантной части может присутствовать и пустой вариант, т.е. х:();

  • любой вариант может, в свою очередь, иметь только одну вариантную часть, которая должна размещаться в конце;

  • при обращении к любому полю должно определяться имя переменной записного типа и через «.» указываться линейная последовательность всех уровней.

Пример:

Пусть требуется описать объект простая геометрическая фигура - круг, прямоугольник, треугольник. Для любой фигуры описание ее должно включать в себя 1. координаты некоторой опорной точки (центра, правого верхнего угла, одной из вершин) и 2. код цвета. Другие же параметры построения будут разными для разных фигур. Так для круга — 1.1: радиус; для прямоугольника — 2.1-2: длины непараллельных сторон; для треугольника — 3.1-4: координаты двух других вершин.

Type

TKrug=record

x0,y0: Real;

cvet: (Kr,Zh,Zel);

zadius: Real;

end;

TTreug=record

x0,y0: Real;

cvet: (Kr,Zh,Zel);

x1,x2,y1,y2: Real;

end;

TPriamoug=record

x0,y0: Real;

cvet: (Kr,Zh,Zel);

h,w: Real;

end;

var

Krug: Tkrug;

Treug: TTreug;

Priamoug: TPiamoug;

Type

TGeomfigure=record

x0,y0: Real;

cvet: (Kr,Zh,Zel);

case Somefig of

K: (zadius: Real);

T: (x1,x2,y1,y2: Real);

P: (h,w: Real);

end;

var

Geomfigure: TGeomfigure;

Begin

write(‘введите символ фигуры’);

readln(Geomfigure.Somefig);

End.

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