Абстрактные типы

Рис. 6. Внутреннее представление вещественного числа 46,5.

Таблица 2. Вещественные типы

Вещественные типы

Таблица 1. Целые типы

Название Размер элемента хранения, байт Множество констант
Byte   0…255
ShortInt   -128…127
Word   0…65535
Integer   -32768…32767
LongInt   -2147483648…2147483647

ЛОГИЧЕСКИЙ ТИП. Значениями логического типа может быть одна из предварительно объявленных констант FALSE (ложь) и TRUE (истина).

Power(BOOLEAN) = 2, Sizeof(BOOLEAN) = 1 (байт),

Ord(False) = 0, Ord(True) = 1.

СИМВОЛЬНЫЙ ТИП. Значениями символьного типа является множество всех символов компьютера. Каждому символу приписывается целое число в диапазоне 0..255. Это число служит кодом внутреннего представления символа. Первая половина символов с кодами 0..127 соответствует стандарту ASCII. Вторая половина символов с кодами 128..255 не ограничена жесткими рамками стандарта и может меняться на компьютерах разных типов.

Power(CHAR) = 256, Sizeof(CHAR) = 2 (байта), Ord(‘F’) = 70;

ПОЛЬЗОВАТЕЛЬСКИЙ ПЕРЕЧИСЛИМЫЙ ТИП (обозначим Enum_Type) задает некоторое подмножество целого типа WORD и может рассматриваться как компактное объявление группы N именованных целочисленных констант со значениями 0,1,…65535. Например,

TypeNote= (do, re, mi, fa, sol, la, si).

Так, значение константы с именем fa и соответственно ее порядковый номер в множестве констант типа Note равны 3, т.е. Ord(fa) = 3.

Power (Enum_Type) = N, N <= 65536.

Sizeof(Enum_Type) = 1 + log2(Power (Enum_Type) – 1) DIV 8.

Power(Note) = 7, Sizeof(Note) = 1 (байт).

Для ограничения полного множества значений некоторого порядкового типа используются отрезки типа. ОТРЕЗОК ТИПА ИЛИ ДИАПАЗОН (обозначим Diap_Type) – упорядоченное подмножество полного множества значений любого порядкового типа, исключая диапазон. Тип-диапазон задается границами своих значений (обозначим их MIN и MAX) внутри базового типа:

Type Diap_Type = MIN.. MAX;

MIN = Low (Diap_Type), MAX = High (Diap_Type).

Power (Diap_Type) = MAX - MIN + 1 <= 65536.

Sizeof(Diap_Type) = 1 + log2(Power (Diap_Type) – 1) div 8.

Например,

Type Otr = 10..19;

Low (Otr) = 10, High(Otr) = 19, Ord(15) = 15,

Power(Otr) = 10, Sizeof(Otr) = 1 (байт).

Порядковые типы конечны и счетны, значения их всегда сопоставимы с рядом целых чисел, и, следовательно кодируются абсолютно точно. Множество констант ВЕЩЕСТВЕННЫХ ТИПОВ бесконечно, значения вещественных типов определяются с некоторой конечной точностью, зависящей от внутреннего формата вещественных чисел.

Название Размер элемента хранения, байт Количество значащих цифр Диапазон десятичного порядка
single   7..8 -45…+38
real   11…12 -39…+38
double   15…16 -324…+308
extended   19…20 -4951…+4932
comp   19…20 -2*1063+1…+2*1063-1

Элемент хранения вещественного типа имеет следующую структуру:

 
 


Здесь s – знаковый разряд числа; e – экспоненциальная часть, содержащая порядок; m – мантисса числа. Мантисса имеет длину от 23 (для SINGLE) до 63 (для EXTENDED) двоичных разрядов, что и обеспечивает точность 7..8 для SINGLE и 19..20 для EXTENDED десятичных цифр. Знак мантиссы определяет знак числа и имеет значения: 0 – для положительных чисел, 1 – для отрицательных чисел. Порядок числа запоминается увеличенным на 2008 (128). Такой способ хранения порядка называется смещенным. Десятичная точка подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называются арифметикой с плавающей точкой. На рис. 6 показано внутреннее представление вещественного числа 46,5 в формате SINGLE.

 
 


46,510 = 56,48 = 0,5648 * 82 = 0,5648 * 26

Смещенное представление порядка (в формате SINGLE под порядок отводится 8 разрядов):
610 = 68   00000110
2008 + 10000000
порядок = 10000110

 
 


Абстрактные типы данных (АТД) конструируются в программе на основе встроенных и ранее сконструированных абстрактных типов. Если конструирование осуществляется путем агрегирования, т.е. объединения свойств составляющих типов, полученный тип является структурированным типом или агрегатом. Если при конструировании объединяются разнородные свойства, получается новый тип – ЗАПИСЬ (обозначим Rec_Type). Пусть Тип Rec_Type строится на основе типов Type1, Type2,… Type N.

Type Rec_Type = record

< Имя свойства 1 >: Type1;

< Имя свойства 2 >: Type2;

...

< Имя свойства N >: Type N;

end;

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

Power(Rec_Type) = Power(Type1) * Power(Type2) * … * Power(TypeN),

Sizeof(Rec_Type) = Sizeof(Type1) + Sizeof(Type2) + … + Sizeof(TypeN).

Например,

Type Rec = record

X: 0..9; Y: 0..9

end;

Множество констант этого типа включает 100 пар значений (0,0), (0,1),…(0,10), (1,0), (1,1), …, (1,10), (10,0), …(10,10).

Power(Rec) = Power(X) * Power(Y) = 10 * 10 = 100,

Sizeof(Rec) = Sizeof(X) + Sizeof(Y) = 1 + 1 = 2 (байта).

Если при конструировании типа объединяются однородные свойства, получается новый тип - МАССИВ (обозначим Array_Type). Массив – это агрегат, составленный из однородных свойств. Пусть тип Array_Type формируется из N элементов типа Type1:

Const N = …; { N – количество элементов массива }

Type Array_Type = array [1..N ] of Type1;

Power(Array_Type) = Power(Type1)N,

Sizeof(Array_Type) = N * Sizeof(Type1).

На базе типа с ограниченным множеством значений (обозначим Base_Type) можно построить тип с более широким спектром значений – тип МНОЖЕСТВО (обозначим Set_Type). Множество определяется как набор всевозможных комбинаций однотипных логически связанных объектов некоторого базового типа. Мощность базового типа не дожна превышать 256 констант. Пусть в качестве базового типа для построения АТД КАРТИНА используется перечисление цветов

Type Colour = (white, black, red, green, blue, yellow, gray, magenta, cyan);

Type Picture = Set of Colour;

Примеры множественных констант:

[ ], [ red ], [ green, blue, red ], … [ green, black ], …[ white.. cyan ].

Power(Set_Type) = 2 Power(Base_Type),

Sizeof(Set_Type) = 1 + (Power(Base_Type) – 1) div 8 или

Sizeof(Set_Type) = (MAX div 8) – (MIN div 8) + 1, где

MIN = Low(Base_Type), MAX = High(Base_Type).

Power(Colour) = 9, Sizeof(Colour) = 1 (байт),

Power(Picture) = 29 = 512, Sizeof(Picture) = 2 (байта).

Элемент хранения объекта множественного типа должен допускать размещение 2 Power(Base_Type) значений. В качестве представления объекта множественного типа используется характеристическая функция, являющаяся массивом логических значений, i–я компонента которого означает наличие или отсутствие i-й константы базового типа в множестве. Каждая константа базового типа в представлении константы множественного типа имеет сопоставимый номер и занимает 1 бит, соответствующий ее порядковому номеру в базовом типе. Например, представление объекта [white, red, green, gray, cyan] в его элементе хранения выглядит следующим образом (рис.7):



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: