Перечисляемый тип
ЛОГИЧЕСКАЯ СТРУКТУРА. Перечисляемый тип представляет собой упорядоченный тип данных, определяемый программистом, т.е. программист перечисляет все значения, которые может принимать переменная этого типа. Значения являются неповторяющимися в пределах программы идентификаторами, количество которых не может быть больше 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).
Б) Интервальный тип от перечислимого: определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора - его значение.
На логическом уровне все операции, разрешенные для данных базового типа, возможны и для данных соответствующих интервальных типов.