Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.7. Порядковые типы данных

2.7.1. Перечисляемый тип данных

Перечисляемый тип задается путем перечисления в круглых скобках всех допустимых значений типа.

имя_типа = (значение1, значение2,..., значениеN);

Значения не могут быть ничем, кроме имен. Их можно присваивать и сравнивать, но нельзя вводить и выводить операторами READ и WRITE. Имена всех элементов перечисляемого типа трактуются как константы этого типа.

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

Пример. Задание типа, описывающего время года.

type

season = (winter, spring, summer, autumn);

var

X, У: season;

Пример. Задание типа, описывающего день недели. type

weekday = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

var A, B: weekday;

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

type

workday = (Monday, Tuesday, Wednesday, Thursday, Friday);

вызовет ошибку.

2.7.2. Интервальный тип данных

Интервальный тип данных задается как интервал значений ранее определенного (базового) типа. Задается интервал своими крайними значениями.

имя_типа = значение1 .. значение2;

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

type

day=1..31;

month = 1..12;

letter = 'A '..'Z'

workday = Monday .. Friday;

Переменная интервального типа имеет все свойства переменной базового типа, однако ее значение должно лежать в заданном интервале.

Именно интервальный тип до сих пор применялся нами для индексации массива.

2.7.3. Порядковые типы данных

Порядковыми называются все скалярные типы, значения которых можно расположить в возрастающем порядке. Типы INTEGER, CHAR, BOOLEAN, перечисляемые и интервальные, являются порядковыми. Тип REAL порядковым не является.

Для любых порядковых типов определены функции:

PRED (X) возвращает значение, предшествующее X.

К наименьшему значению не применима.

SUCC (X) возвращает значение, следующее за X.

К наибольшему значению не применима.

ORD (X) возвращает порядковый номер аргумента X. Значения порядкового типа нумеруются числами 0, 1,2,..., начиная с наименьшего. Исключение составляет тип INTEGER, для которого ORD(X)=X.

Имеются также процедуры:

INC(var X), INC(var X, N:integer) - увеличивает порядковый номер аргумента X на 1 и на N соответственно;

DEC(var X), (var X, N:integer) - уменьшает порядковый номер аргумента X на 1 и на N соответственно.

Использование порядковых типов позволяет расширить определение массива следующим образом:

ТУРЕ имя =ARRAY[тип_индекca] OF базовый тип;

Типом индекса массива может быть любой порядковый тип данных.

Примеры возможных описаний:

array [(winter, spring, summer, autumn)] of real; array[weekday] of integer;

array [char] of integer;

array ['A'..'2'] of boolean.

Также расширяется определение операторов Паскаля и CASE. Параметр цикла в операторе FOR и селектор в операторе CASE могут быть переменными любого порядкового типа.