Интервальный тип

Перечисляемый тип

ЛОГИЧЕСКАЯ СТРУКТУРА. Перечисляемый тип представляет собой упорядоченный тип данных, определяемый программистом, т.е. программист перечисляет все значения, которые может принимать переменная этого типа. Значения являются неповторяющимися в пределах программы идентификаторами, количество которых не может быть больше 256, например,

type color=(red,blue,green);

work_day=(mo,tu,we,th,fr);

winter_day=(december,january,february);

МАШИННОЕ ПРЕДСТАВЛЕНИЕ. Для переменной перечислимого типа выделяет-ся один байт, в который записывается порядковый номер присваиваемого значения. Порядковый номер определяется из описанного типа, причём нумерация начинается с 0. Имена из списка перечислимого типа являются константами, например,

var B,С:color;

begin B:=bluе; (* B=1 *)

C:=green; (* С=2 *)

Write(ord(B):4,ord(C):4);

end.

После выполнения данного фрагмента программы на экран будут выданы цифры 1 и 2. Содержимое памяти для переменных B И C при этом следующее: В - 00000001; С - 00000010.

ОПЕРАЦИИ. На физическом уровне над переменными перечислимого типа определены операции создания, уничтожения, выбора, обновления. При этом выполняется определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора определяется его значение.

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

ЛОГИЧЕСКАЯ СТРУКТУРА. Один из способов образования новых типов из уже существующих - ограничение допустимого диапазона значений некоторого стандартного скалярного типа или рамок описанного перечислимого типа. Это ограничение определяется заданием минимального и максимального значений диапазона. При этом изменяется диапазон допустимых значений по отношению к базовому типу, но представление в памяти полностью соответствует базовому типу.

МАШИННОЕ ПРЕДСТАВЛЕНИЕ. Данные интервального типа могут храниться в зависимости от верхней и нижней границ интервала независимо от входящего в этот предел количества значений в виде, представленном в таблице 2.4. Для данных интервального типа требуется память размером один, два или четыре байта, например,

var A: 220..250; (* Занимает 1 байт *)

В: 2221..2226; (* Занимает 2 байта *)

C: 'A'..'K'; (* Занимает 1 байт *)

begin A:=240; C:='C'; B:=2222; end.

После выполнения данной программы содержимое памяти будет следующим: A - 11110000; C - 01000011; B - 10101110 00001000.

 

Таблица 2.4

Базовый тип Максимально допустимый диапазон Размер требуемой памяти
Shortint Integer Longint Byte Word Char Boolean -128 … 127 -32768 … 32767 -2147483648 … 2147483647 0 … 255 0 … 65535 chr(ord(0)) … chr(ord(255)) false … true 1 байт 2 байта 4 байта 1 байт 2 байта 1 байт 1 байт

Примечание: запись chr(ord(0)) в таблице следует понимать как: символ с кодом 0.

 

ОПЕРАЦИИ. На физическом уровне над переменными интервального типа определены операции создания, уничтожения, выбора, обновления. Дополнительные операции определены базовым типом элементов интервального типа.

А) Интервальный тип от символьного: определение кода символа и, наоборот, символа по его коду.

Пусть задана переменная типа tz:'d'..'h'. Данной переменной присвоено значение 'e'. Байт памяти, отведенный под эту переменную, будет хранить ASCII-код буквы 'e' т.е. 01100101 (в 10-ом представлении 101).

Б) Интервальный тип от перечислимого: определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора - его значение.

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