Пользовательские типы данных




Кроме стандартных типов данных Pascal поддерживает скалярные типы, определенные самим пользователем. К ним относятся перечисляемый и интервальный типы.

Данные этих типов занимают в памяти 1 байт, поэтому скалярные пользовательские типы не могут содержать более 256 элементов. Их применение обеспечивает семантический контроль вводимых данных, значительно улучшает наглядность программы, упрощает поиск ошибок и экономит память.


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

Перечисляемый тип (enumerated type) — тип данных, заданный списком принадлежащих ему значений.

Объявление перечисляемого типа описывает множество идентификаторов, которые являются возможными значениями перечисляемого типа. Идентификаторы в описании типа представляют собой константы. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки. Первая константа имеет порядковый номер 0, вторая — 1 и т. д.

Формат:

type

<имя типа> = (<значение1, значение2,...,значениеn>);

var

<идентификатор,...>: <имя типа>;

Синтаксическая диаграмма для перечисляемых типов имеет следующий вид.

Пример:

type

Gaz = (Ge, C, O, N);

Metall = (Na, K, Li, Cu, Zn);

var

G1, G2, G3: Gaz;

Met1, Met2: Metall;

Season: (Winter, Spring, Summer, Autumn);

В данном примере приведены два явно описанных пользовательских типа данных — Gaz и Metall. Определены их значения — обозначения некоторых газов и металлов периодической таблицы Д. И. Менделеева. Переменные G1, G2, G3 и Met1, Met2 могут принимать только одно из перечисленных значений. Попытка присвоить им любое другое значение вызовет программное прерывание. Третий тип перечисления является анонимным (не имеет имени) и задается перечислением значений в разделе var. Season является переменной этого типа и может принимать значения Winter, Spring, Summer и Autumn. Таким образом может быть задан любой тип, но это не всегда приемлемо, так как первый способ более понятен и больше соответствует характеру языка Pascal. При этом имена внутри круглых скобок являются константами соответствующего типа перечисления и подчиняются обычным правилам для констант. Выражения и константы перечисляемого типа допустимы для использования в операторе CASE. Операции отношения и логические операции допустимы для значений перечисления одного и того же типа. Упорядочение осуществляется по номеру элемента в описании типа. Например, выражение Winter < Spring будет истинно, так как Spring имеет бoльший номер по порядку в описании типа, чем Winter.

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

Для работы с данными перечисляемого типа в языке Pascal предназначены стандартные подпрограммы Succ, Pred, Ord.

Описанные ранее переменные булевского типа можно представить и как перечисляемый тип, объявленный следующим образом:

type

Boolean = (False, True);

Поэтому для значений False и True справедливы результаты вычисления выражений

False < True
Succ(False) = True
Ord(False) = 0
Pred(True) = False
Ord(True) = 1


Интервальный тип (диапазон)

Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений данной переменной. Компилятор при каждой операции с переменной интервального типа генерирует подпрограммы проверки, определяющие, остается ли значение переменной внутри установленного для нее диапазона.

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

Формат:

type

<имя типа> = <константа1>.. <константа2>;

var

<идентификатор,...>: <имя типа>;

Синтаксическая диаграмма для интервальных типов выглядит следующим образом.

Пример:

type

Days = 1.. 31;

var

RabDay, BolnDay: Days;

В этом примере переменные RabDay и BolnDay имеют тип Days и могут принимать любые значения из диапазона 1…31. Выход за границы диапазона вызывает программное прерывание.

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

const

Min = 1; Max = 31;

type

Days = Min.. Max;

var

RabDay, BolnDay: Days;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: