Перечисленный тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и
располагается в списке, обрамленном круглыми скобками, например:
type
colors = (red, white, blue);
Применение перечисленных типов делает программы нагляднее. Если, например, в программе
используются данные, связанные с месяцами года, то такой фрагмент программы:
  type
      типМесяц=(янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек);
  var
      месяц : ТипМесяц;
  begin
      if месяц = авг then WriteLn('Хорошо бы поехать к морю!');
  end.
был бы, согласитесь, очень наглядным. Увы! В Турбо Паскале нельзя использовать кириллицу в идентификаторах, поэтому мы вынуждены писать
так:
  type
      TypeMonth=(jan,feb,inar,may,jun,jul,aug,sep,oct,nov,dec);
  var
      month: TypeMonth;
  begin
      if month = aug then WriteLn('Хорошо бы поехать к морю!');
  end.
Соответствие между значениями перечисленного типа и порядковыми номерами этих значений устанавливается порядком перечисления:
первое значение в списке получает порядковый номер 0, второе — 1 и т. д. Максимальная мощность перечисленного типа составляет 65 536 значений,
поэтому фактически перечисленный тип задает некоторое подмножество
целого типа WORD и может рассматриваться как компактное объявление сразу
группы целочисленных констант со значениями О, 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 можно преобразовать в значение
перечисленного типа, если только значение целочисленного выражения не превышает мощности перечисленного типа.
Такое преобразование достигается применением автоматически объявляемой функции с именем перечисленного типа.
Например, для рассмотренного выше объявления типов эквивалентны следующие присваивания:
      col := one;
      col := colors(0);
Разумеется, присваивание
      col := 0;
будет недопустимым.
Переменные любого перечисленного типа можно объявлять без предварительного описания этого типа, например:
  var
      col: (black, white, green);