Иллюстрированный самоучитель по Turbo Pascal

Порядковые типы

Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе – 1 и т.д. Максимальная мощность перечисляемого типа составляет 65536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа WORD и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т.д.

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

type
colors = (black, red, white);
ordenal= (one, two, three);
days = (monday, tuesday, Wednesday);

С точки зрения мощности и внутреннего представления все три типа эквивалентны:

ord(black)=0,…, ord(white)=2,
ord(one)=0,…ord(three)=2,
ord(monday)=0,…ord(Wednesday)=2.

Однако, если определены переменные:

var
col:colors; num:ordenal;
day: days;

То допустимы операторы:

col: = black;
num: = succ(two);
day: = pred(tuesday);

Но недопустимы:

col: = one;
day: = black;

Как уже упоминалось, между значениями перечисляемого типа и множеством целых чисел существует однозначное соответствие, задаваемое функцией ORD(X). В Турбо Паскале допускается и обратное преобразование: любое выражение типа WORD можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощное1 перечисляемого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа (см. п. 4.4). Например, для рассмотренного выше объявления типов эквивалентны следующие присваивания:

col: = one;
col: = colors(0);

Разумеется, присваивание:

col: = 0;

Будет недопустимым.

Переменные любого перечисляемого типа можно объявлять без предварительного описания этого типа, например:

var
col: (black, white, green);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.