- •Содержание
- •Введение
- •Структуры данных Классификация структур данных
- •Операции над данными
- •Понятие алгоритма
- •Массивы Описание массива
- •Представление массивов в памяти
- •Рис 1. Представление вектора в памяти
- •Рис 2. Представление вектора ml в памяти
- •Алгоритмы поиска
- •Алгоритмы сортировки
- •Пример сортировки простыми вставками.
- •Описание записи
- •Операции над записями
- •Записи с вариантами
- •Представление записи в памяти
- •Общие процедуры и функции для работы с файлами
- •Процедуры и функции для работы с типизированными файлами.
- •Сортировка содержимого файлов (Внешняя сортировка)
- •Пример внешней сортировки прямым слиянием
- •Пример внешней сортировки естественным слиянием
- •Динамическая память и данные с динамической структурой
- •Ссылочный тип в языке Pascal
- •Типизированные указатели
- •Нетипизированные указатели
- •Операции над переменными ссылочного типа.
- •Динамические списки
- •Реализация списков на языке Pascal.
- •Стек, очередь, дек
- •Рекурсия
- •Нелинейные структуры данных. Деревья
- •Бинарные деревья
- •Реализация бинарных деревьев
- •Способы обхода бинарных деревьев
- •Сортировка с прохождением бинарного дерева
Операции над записями
Важнейшей операцией для записи является операция доступа к выбранному полю записи — операция квалификации. Доступ к полям отдельной записи осуществляется через имя переменной и имя поля.
Практически во всех языках программирования обозначение этой операции имеет вид:
<имя переменной-записи>.<имя поля>
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.