Delphi. Pascal
Урок 9. Перечисляемые типы
Перечисляемые типы - это типы, которые ограничиваются только определенным набором значений. Типичный пример - это дни недели (переменная такого типа может принимать только значения Monday (Понедельник), Tuesday (Вторник) и т. д.). Вы можете сами создавать перечисляемый тип и потом объявлять переменные такого типа. Вот пример:
type
//Объявление нового перечисляемого типа.
Terrain = (Ocean=1, //Океан.
Shelf=2, //Отмель.
Desert=3, //Пустыня.
Plain=4, //Равнина.
Forest=5, //Лес.
Jungle=6 //Джунгли.
);
var
//Объявление переменной типа Terrain.
t: Terrain;
begin
t:=Forest;
if t=Forest then
Writeln('Forest')
else
Writeln('Not a Forest');
//Ожидаем нажатия Enter.
Readln;
end.
Переменной t типа Terrain мы можем присваивать только те значения, которые мы определили в типе Terrain.
В принципе значения переменных перечисляемого типа соответствуют целым числам (мы в приведенном примере напрямую сопоставили значениям целые числа). Использовать это можно, например, так:
if t=Terrain(5) then
...
Здесь мы число 5 приводим к типу Terrain (и получаем значение Forest).
При объявлении нового типа нумерация идет по умолчанию с нуля (если мы не указываем ее явным образом). При пропуске нумерации берется следующее число. Вот пример:
type
//Объявление нового перечисляемого типа.
Terrain = (Ocean, //Океан = 0.
Shelf=2, //Отмель = 2.
Plain=4, //Равнина = 4.
Desert, //Пустыня = 5.
Forest=6, //Лес = 6.
Jungle=6 //Джунгли = 6.
);
Также обратите внимание, что нескольким значениям может соответствовать одно и тоже целое число (6 в нашем примере).
Пример.
TYPE ФИГУРА=(КОРОЛЬ, ФЕРЗЬ, ЛАДьЯ, СЛОН, КОНЬ); ДЕНЬ_НЕДЕЛИ=(ПОНЕДЕЛЬНИК, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА, СУББОТА, ВОСКРЕСЕНЬЕ); ДОМАШНЕЕ_ЖИВОТНОЕ=(КОЗЛЕНОК, ТЕЛЕНОК, КОРОВА, БЫК, СВИНЬЯ);
Для значений перечисляемых типов определены стандартные функции:
- SUCC - получение следующего значения данного типа,
- PRED - получение предыдущего значения данного типа,
- ORD - порядковый номер значения данного типа (значения нумеруются, начиная с 0, в порядке их перечисления в определении типа).
Так, SUCC(СЛОН)=КОНЬ PRED(СРЕДА)=ВТОРНИК, ORD (КОРОВА)=2;
Функцию SUCC нельзя применять к последнему значению типа, функцию PRED - к первому.
Поскольку к значениям перечисляемых типов применимы функции получения следующего и предыдущего значения, а также операции сравнения, такие значения могут задавать границы FOR - цикла.
Стандартные типы INTEGER,BOOLEAN,CHAR (описание этого типа почему-то выпало из конспектов) также можно отнести к типам, заданным перечислением. К ним применимы функции SUCC, PRED, ORD
Пример.
SUCC(6)=7 PRED(TRUE)=FALSE SUCC('0')='1' ORD(FALSE)=0
В программе языка Паскаль одно и тоже имя не может входить в определения разных перечисляемых типов. Так, имя КОНЬ нельзя включить одновременно и в определение типа ФИГУРА, и в определение типа ДОМАШНЕЕ_ЖИВОТНОЕ.
Переменной какого-либо типа можно присваивать значение только этого типа. Оба операнда операции сравнения также должны быть одного типа. Бессмысленно интересоваться, что больше - ВТОРНИК или ЛАДЬЯ.