- •А.Н. Горитов
- •Учебное пособие
- •Учебное пособие
- •Введение
- •1 Введение в предмет
- •1.1 Непрерывная и дискретная информация
- •1.2 Данные и эвм
- •1.3 Объекты предметной области
- •1.4 Представление информации об объектах
- •1.5 Абстрактные алфавиты. Кодирование
- •2 Основные типы и структуры данных эвм
- •2.1 Архитектурные особенности эвм, наиболее существенные для представления данных
- •2.2 Основные понятия о типах и структурах данных
- •2.3 Массивы
- •2.4 Строки
- •2.5 Записи
- •2.6 Записи с вариантами
- •2.7 Множества
- •3 Последовательный файл
- •3.1 Основные свойства последовательных файлов
- •3.2 Сортировка последовательных файлов
- •4 Полустатические структуры
- •4.1 Стек, очередь и дек как полустатические структуры
- •4.2 Представление полустатических структур с помощью массивов
- •5 Линейные динамические структуры
- •5.1 Основные свойства динамических структур
- •5.2 Реализация связного списка массивом
- •5.3 Кольцевой связный список
- •5.4 Линейный двусвязный список
- •6 Представление динамических структур с помощью указателей
- •6.1 Указатели
- •6.2 Представление стека
- •6.3 Представление очереди
- •6.4 Ведение динамических списков с помощью указателей
- •6.5 Алгоритм составления кольцевого двусвязного списка
- •7 Древовидные структуры данных
- •7.1 Основные понятия и определения
- •7.2 Представление деревьев в эвм
- •7.3 Основные операции с бинарными деревьями
- •7.4 Сильно ветвящиеся деревья
- •8 Алгоритмы на графах
- •8.1 Машинное представление графов
- •8.2 Поиск в глубину в графе
- •8.3 Поиск в ширину в графе
- •8.4 Стягивающие деревья (каркасы)
- •8.5 Отыскание фундаментального множества циклов в графе
- •8.6 Эйлеровы пути в графе
- •8.7 Алгоритмы с возвратом
- •8.8 Нахождение кратчайших путей в графе
- •8.9 Кратчайшие пути от фиксированной вершины
- •8.10 Алгоритм Дейкстры
- •8.11 Пути в бесконтурном графе
- •Литература
2.6 Записи с вариантами
На практике часто оказывается удобным рассматривать два типа как варианты одного и того же типа. Например, в геометрии можно использовать декартовы или полярные координаты точки на плоскости. Эти координаты можно считать типом, объединяющим два варианта записи, компонентами которой являются:
а)две длины;
б)длина и угол.
Для того, чтобы определить, какой вариант в данный момент принят, вводится третья компонента. Она называется дескриптором типа или полем признака. Например,
TYPE COORD = RECORD
CASE KIND : (DEC, POL) OF DEC : (X, Y : REAL); POL : (R, FI : REAL) END; Здесь имя поля признака – KIND, а имена координат либо X и Y в случае DEC, либо R и FI в случае POL. Множество значений типа COORD есть объединение двух типов: T1 = (X, Y : REAL) T2 = (R, FI : REAL), а его кардинальное число равно сумме кардинальных чисел T1 и T2.
Однако чаще всего приходится объединять не два полностью различных типа, а два типа с частично совпадающими компонентами.
Например, в анкетных данных работников в зависимости от пола могут записываться разные существенные характеристики. Для мужчин в какой-то ситуации могут быть существенными вес и наличие бороды, для женщины – три основных её размера (тогда как вес она может хранить в тайне). Тогда получим следующее описание типа:
TYPE ALFA = STRING[1..15]; TYPE PERSON = RECORD
FA, IM, OT : ALFA; DATR : DATE; ROST : INTEGER; CASE POL : (M, W) OF M : (WES : REAL;
BOR : BOOLEAN); W : (SIZE : ARRAY[1..3] OF INTEGER) END; Общий вид описания составного типа с вариантами: TYPE T = RECORD S1 : T1; ... ; SN-1 : TN-1; { общая часть } CASE SN : TN OF
C1 : (S11 : T11; ... ; S1 N1 : T1 N1);
CM : (SM1 : TM1; ... ; SM NM : TM NM) END Вариантная часть всегда должна быть последней в записи. Допускаются вложенные друг в друга вариантные части записей.
Здесь Si, Sij – селекторы компонент, принадлежащих к типам Ti и Tij, а Sn - имя поля признака. Переменная x типа T состоит из компонент X.S1, X.S2, ... , X.SN, X.SK1, ... , X.SK,NK
когда текущее значение X.SN = CK. В противном случае – ошибка (бородатая женщина). При использовании записей с вариантами лучше всего действия, связанные с каждым из вариантов, группировать в выбирающем секторе, так называемом операторе вариантов. Его структура отражает структуру описания записи с вариантами: CASE X.SN OF C1 : S1; C2 : S2;
CM : SM END;
S1, S2, ..., SM - исполняемые операторы.
Пусть, например, нужно вычислить расстояние между точками А и В, заданными переменными типа COORD. В зависимости от того, являются координаты одной или двух точек декартовыми или полярными, формулы для вычисления будут различными. Всего получим 4 варианта: VAR A,B : COORD; D : REAL; CASE A.KIND OF
DEC : CASE B.KIND OF
DEC : D:=SQRT(SQR(A.X-B.X)+SQR(A.Y-B.Y)); POL : D:=SQRT(SQR(A.X-B.R*COS(B.FI))+SQR(A.Y-B.R*SIN(B.FI))) END;
POL : CASE B.KIND OF
DEC : D:=SQRT(SQR(A.R*COS(A.FI)-B.X)+SQR(A.R* SIN(A.FI)-B.X)); POL : D:=SQRT(SQR(A.R+SQR(B.R)-2*A.R*B.R* COS(B.FI-A.FI))
END END
Представление записей в памяти ЭВМ
В Паскале записи отображаются в памяти так, что их компоненты располагаются последовательно. Каждая компонента обычно занимает целое число слов.
Адрес какой-либо компоненты (поля) записи относительно начального адреса R называется смещением поля Ki. Оно вычисляется по формуле
Ki = S1 + S2 + ... + Si-1, где Sj - размер j-й компоненты в словах.
Для массива Ki = (I-1)S, т.к. все длины одинаковы.
Доступ к компонентам записи ограничен - можно пользоваться лишь фиксированными идентификаторами. Это ограничение позволяет узнать относительные адреса во время трансляции, что увеличивает эффективность доступа к записям.