Главная » Free Pascal » Данные перечислимого типа Free Pascal

0

Перечисления представляют собой упорядоченный список символьных "значений":

Type

rainbow = (red, orange, yellow, green, aqua, blue, purple);

Var

col: rainbow;

В программе переменной col может быть присвоено одно из перечисленных значений:

col:=green;

В последующем значение переменной перечислимого типа можно сравнить с одним из возможных ее значений:

if col=red then …

По описанию перечисления компилятор присваивает каждому мнемоническому "значению" числовой порядковый номер, начиная с 0 (red=0, orange=1, yellow=2 и т. д.). В принципе, над мнемоническими "значениями" можно производить такие же операции, как и над целыми числами (если это имеет смысл). Например:

col := orange + green;  // аналог 1+3

После этого значению переменной col будет соответствовать мнемоническое значение aqua, имеющее порядковый номер 4.

В чем смысл замены целочисленных констант такими символьными обозначе- ниями? Дело в том, что в конкретных прикладных задачах удобно иметь дело с мнемоническими обозначениями характеристик некоторых объектов. Например, имея дело с цветами радуги, удобно ввести обозначение для палитры радуги (rain- bow) и перечислить в ней цвета в том порядке, как они упорядочены в природе

("каждый  охотник  желает  знать,  где  сидит  фазан" —  красный,  оранжевый, желтый, зеленый, синий, голубой, фиолетовый).

В программах обработки экономической информации очень часто приходится

иметь дело с названиями месяцев, дней недели. В таких случаях полезно прибегать к перечислениям типа:

Type

week=(sunday=1, monday, tuesday, wednesday, thursday, friday, saturday);

month=(jan=1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec );

В приведенных примерах присутствует некоторая особенность. Нумерация констант по умолчанию с 0 противоречит общепринятым нормам работы с кален- дарем. Поэтому для первой константы указано нестандартное значение 1, а все по- следующие будут пронумерованы в порядке возрастания номеров (monday=2, tuesday=3, …).

Перечисления очень широко используются многими системными программами,

особенно графическими:

Type

line_style=(SOLID_LINE,     // сплошная линия DOTTED_LINE,    // пунктирная линия CENTER_LINE,    // штрихпунктирная линия DASHED_LINE,    // штриховая линия

USERBIT_LINE);  // линия, определяемая пользователем COLORS=(BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,…);

Системный набор операций над переменными типа перечислений довольно ог- раниченный: им можно присваивать значения из объявленного списка, сравнивать значения однотипных переменных, передавать в качестве параметров другим функциям. Попытка вывести их значения приводит к появлению на экране припи- санных им числовых номеров.

Функция ord, примененная к элементу перечислимого типа, позволяет узнать числовой код, приписанный данному мнемоническому значению. Например:

ord(yellow)=2 ord(mar)=3 ord(USERBIT_LINE)=4

К данным перечислимого типа можно применять функции pred и succ для оп- ределения предшествующего или следующего элемента. Например:

pred(yul)=yun succ(yul)=aug

Попытка узнать, кто находится перед первым элементом перечисления или по- сле последнего, фиксируется как ошибка (при условии, что включен режим кон- троля интервалов).

Так как для перечислений установлена очередность, то из них могут быть обра- зованы данные интервального типа. Например:

Type

WorkDay = sunday..thursday; // рабочие дни недели

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии