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

В программу можно ввести переменные какого-либо типа, не совпадающие ни с одним из стандартных типов. Такой тип задается перечислением значений при объявлении типа; любое из этих значений может принимать переменная данного типа, объявленная далее в программе.

Общий вид описания перечисляемого типа:

type 
    nm = (word1, word2,, wordN);
var
    w: nm;

здесь nm – идентификатор типа (произвольный), word1, word2, … - значения, которые может принимать переменная w, принадлежащая типу nm.

Значения данного типа считаются упорядоченными, то есть описание типа одновременно вводит упорядочение word1 < word2 < wordN. Порядковые значения отсчитываются с 0.

К переменным типа перечисления можно применять функции ord, pred, succ и процедуры inc и dec.

Ко всем переменным одного и того же скалярного типа применимы операции отношения: =, <>, <=, >=, <, >.

Пример 1. type color = (red, yellow, green, blue);
Здесь определено, что red < yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

type
    color = (red, yellow, green, blue);
 
var
    a: color;
    b: color;
 
begin
    a := red;
    writeln(a);
    writeln(succ(a));
 
    readln(b);
    writeln(ord(b));
end.

Пример выполнения:

red
yellow
blue
3

Функция succ(x)

По элементу x определяется та упорядоченная последовательность, которой принадлежит x, и выдается элемент, следующий за x в этой последовательности.

Пример 2. Пусть задана последовательность букв в алфавитном порядке. Тогда succ(A) есть B, succ(L) есть M.

Для примера 1 succ(red) есть yellow.

Функция pred(x)

По элементу x определяется последовательность, которой принадлежит x, и выдается предыдущий элемент этой последовательности.

Пример 3. pred(B) есть A; pred(Z) есть Y.

Функция ord(x)

Выдается номер элемента x в последовательности. Исчисление начинается с нуля.

Пример 4. ord(red) равен 0, а ord(green) равен 2.