Yurijnd.com
Воскресенье, 13.07.2025, 13:01
Меню сайта

Вход на сайт

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    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 (описание этого типа почему-то выпало из конспектов) также можно отнести к типам, заданным перечислением. К ним применимы функции SUCCPREDORD

    Пример.

    SUCC(6)=7 PRED(TRUE)=FALSE SUCC('0')='1' ORD(FALSE)=0
    

    В программе языка Паскаль одно и тоже имя не может входить в определения разных перечисляемых типов. Так, имя КОНЬ нельзя включить одновременно и в определение типа ФИГУРА, и в определение типа ДОМАШНЕЕ_ЖИВОТНОЕ.

    Переменной какого-либо типа можно присваивать значение только этого типа. Оба операнда операции сравнения также должны быть одного типа. Бессмысленно интересоваться, что больше - ВТОРНИК или ЛАДЬЯ.

    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz