Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatica / lin.doc
Скачиваний:
79
Добавлен:
09.04.2015
Размер:
776.19 Кб
Скачать

Перечислимые типы (перечни)

На практике часто приходится иметь дело с разными понятиями, каждое из которых включает свое множество частных случаев. Напри­мер, «месяц года» – январь, февраль, ... декабрь; «день недели» – поне­дельник, ... воскресенье и т.п. При решении задач, связанных с использо­ванием понятий подобного рода, их отдельные частные случаи можно закодировать в цифровой форме путем отображения на целые числа, например, месяцы закодировать последовательными целыми числами от 1 до 12. Однако в этом случае программа теряет наглядность.

В Паскале предусмотрены перечислимые типы значений, кото­рые могут быть заданы программистом

<задание перечислимого типа>::=(<имя>{,<имя>})

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

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

Пример.

typeнеделя=(пн,вт,ср,чтв,птн,сб,вс);

varday: неделя ;

Переменные перечислимого типа можно использовать, напри­мер, в качестве параметров функций succ(x), pred(x), ord(x), параметра циклаfor day :=пн to сб do Sили в условных выраженияхA>B.

Но нельзя day:=вт; write(day). Для ввода и вывода значений перечислимого типа используют оператор варианта.

Оператор варианта

Оператор варианта – это обобщение условного оператора.

<оператор варианта>::= case<селектор оператора>of

<элемент списка вар.>{;<элемент списка вар.>}

{else <оператор>}

end

<селектор оператора>::=<выражение>

<элемент списка вар.>::=<список меток вар.>:<оператор>

<список меток варианта>::=<метка варианта>{,<метка варианта>}

<метка варианта>::=<константа>

Таким образом, оператор варианта имеет следующий вид

case A of

C1: S1;

. . . . . .

Cn: Sn;

elseS;

end;

Условие ветвления Aдля оператораcaseзадается выражением порядкового типа, иcase-константыC1, …Cnдолжны иметь тот же тип, что и селектор оператора, причем ни одна из этих констант не может использоваться в качестве метки варианта более одного раза.

Здесь S1, … Sn– операторы, из которых должен выполниться только тот, у которогоcase-константа равна значению выражения A. Если средиcase-констант нет значения выражения A, выполняется опе­ратор S, записанный послеelse. Ветвьelseможет отсутствовать. Тогда, если селектор не совпадает ни с однойcase-константой, операторcaseбудет пропущен, т.е. не выполнится ни одного оператора внутриcase.

Ограниченные типы

В Паскале особое внимание уделено вопросу повышения надеж­ности программы, т.е. своевременному выявлению различного рода оши­бок в программе. Например, Паскаль требует явного описания всех ис­пользуемых в программе переменных и указания типа каждой из них, и транслятор следит за правильностью присваивания значений выражений по типу и т.п. Если у нас есть предварительная информация о диапазоне изменения переменной, то вполне естественно передать транслятору эту информацию для контроля корректности присваивания ей значений. Например, если переменная n типа integer в программе представляет текущее значение дня месяца, то 1<=n<=31.

Достижению этой цели в Паскале служат ограниченные типы (типы диапазона или интервальные). Каждый такой тип задается нало­жением ограничений на стандартный или заданныйбазовыйтип, кото­рый должен быть порядковым. В качестве базового можно использовать стандартные типыinteger,boolean,charи перечислимые типы. Типrealнельзя использовать в качестве базового.

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

<задание ограниченного типа>::=<константа1>..<константа2>

Здесь <константа1>и<константа2>– константы базового типа, причем<константа1> > <константа2>.

Пример. type Месяц=1..12; РабДень=пн..птн;

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

Поскольку множество значений ограниченного типа принадле­жит множеству значений базового типа, то к этим значениям применимы все операции и функции, которые определены над базовым типом, и зна­чения ограниченного типа могут использоваться везде, где могут исполь­зоваться значения базового типа. Важно лишь, чтобы значения, присваи­ваемые переменным ограниченного типа, принадлежали соответствую­щему диапазону – в противном случае будет зафиксирована ошибка.

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

Соседние файлы в папке Informatica