Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pnayavka_quest.doc
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
182.78 Кб
Скачать

Сколько элементов может содержать множество типа SET OF BOOLEAN, SET OF CHAR?

2, 256(255?)

Пример перечислимого типа данных. Итерация по перечислимому типу.

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

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

TYPE

DayOfWeek = (Monday, Tuesday, Wednesday, Thursday,

Friday, Saturday, Sunday);

VAR

Day : DayOfWeek;

описывают новый тип, называемый день недели, семь констант, входящих в него записаны как идентификаторы, именующие дни недели, и переменная Day может принимать любые из этих константных значений. Day может принимать значения только из списка заданного в DayOfWeek. Значения DayOfWeek упорядочены так, как они перечисляются в объявлении типа:

Monday < Tuesday < ... < Sunday

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

IF Day < Saturday

THEN {не weekend}

...

<перечислимый тип> ::= (<список идентификаторов>)

<список идентификаторов> ::= <список идентификаторов>, <идентификатор>

| <идентификатор>

Контекстное правило:

<идентификаторы> <перечислимого типа> не могут дублировать другие идентификаторы в данной области видимости

FOR Day := Tuesday TO Sunday

DO

WRITELN(‘OLOLO’);

Синтаксис для выражений (логического | целого | …) типа данных.

Синтаксис логических выражений

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

| <простое выражение> <оператор сравнения> <простое выражение>

<простое выражение> ::= <простое выражение> OR <терм> | <терм>

<терм> ::= <терм> AND <множитель> | <множитель>

<множитель> ::= <переменная> | <константа> | (<выражение>) | NOT <множитель>

Синтаксис перечислимого типа

<перечислимый тип> ::= (<список идентификаторов>)

<список идентификаторов> ::= <список идентификаторов>, <идентификатор>

| <идентификатор>

Синтаксис целого типа

<знаковое целое> ::= <знак><беззнаковое целое>| <беззнаковое целое>

<знак> ::= + | –

<беззнаковое целое> ::= <последовательность цифр>

<последовательность цифр> ::= <последовательность цифр><цифра> | <цифра>

<цифра> ::= 0|1|2|3|4|5|6|7|8|9

Синтаксис целочисленных выражений

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

| <простое выражение><оператор сравнения><простое выражение>

<простое выражение> ::= <простое выражение> <аддитивный оператор> <терм>

| <терм> | <знак> <терм>

<терм> ::= <терм> <мультипликативный оператор> <множитель> | <множитель>

<множитель> ::= <переменная> | <беззнаковая константа> | (выражение) | NOT <множитель>

<оператор сравнения> ::= = | <> | < | <= | > | >=

<знак> ::= + | -

<аддитивный оператор> ::= + | - | OR

<мультипликативный оператор> ::= * | DIV | MOD | AND

<переменная> ::= <идентификатор переменной>

<беззнаковая константа> ::= <беззнаковое число> | <идентификатор константы>

| <строка символов>

<беззнаковое число> ::= <беззнаковое целое>

Для WRITE:

<список параметров WRITELN> ::= (<файловая переменная>)|<список параметров WRITE>|

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

<список элементов WRITE> ::= <файловая переменная> <параметры WRITE>

| <параметры WRITE>

<параметры WRITE> ::= <параметры WRITE> <параметр WRITE>

| <параметр WRITE>

<параметр WRITE> ::= <выражение>:<выражение> | <выражение>

Тип диапазон

<тип диапазон> ::= <константа> .. <константа>

<константа> ::= <знак> <беззнаковое число> | <беззнаковое число>

| <идентификатор константы> | <строка символов>

Отличия операторов case и if

Мы использовали вложенные IF для выбора одного оператора из нескольких. Оператор CASE может часто заменять вложенные IF с выигрышем в наглядности и эффективности.

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

CASE A > B OF

TRUE: Max := A;

FALSE: Max := B;

END

выражение для выбора будет A > B типа BOOLEAN, а метками будут константы того же типа TRUE и FALSE. Выражение для выбора вычисляется и оператор, помеченный соответствующей меткой, выбирается для выполнения. После того как выбранный оператор завершает выполнение, управление передается оператору, следующему за оператором CASE. Константные метки не могут повторяться, поэтому выполнено будет не более одного оператора. Если не существует оператора с меткой имеющей значение выражения для выбора, результат выполнения оператора CASE неопределен.

Оператор CASE может быть симулирован вложенными операторами IF. Рассмотрим оператор CASE:

CASE Exp OF

L1a, L1b: S1;

L2 : S2;

...;

LN: SN

END

оператор IF

IF (Exp = L1a) OR (Exp = L1b)

THEN

S1

ELSE

IF Exp = L2

THEN

S2

ELSE

...

ELSE

IF Exp = LN

THEN

SN

Выполняет те же действия, когда значение Exp является одним из L1a, L1b, L2, ..., LN. Однако когда значение Exp не входит в набор вариантов, оператор IF работает как пустой оператор, а оператор CASE неопределен. Большинство Паскаль-машин реализуют оператор CASE некорректно, и он в случае отсутствия варианта работает аналогично соответствующему оператору IF.

Использование оператора CASE сокращает глубину вложенности операторов и необходимость в логических операторах, повышая читаемость программы. Также оператор CASE более эффективен, чем IF, поскольку весь весь оператор CASE вычисляется один раз, а для вложенных IF выполняется множество сравнений.

Операторы CASE полезны при работе с перечислимыми типами данных и с типами данных, содержащими много значений, если обрабатываются небольшие наборы возможных вариантов.

Синтаксические правила для оператора CASE представлены ниже

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

<список вариантов>::= <список вариантов>, <вариант> | <вариант>

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

<список констант> ::= <список констант>, <константа> | <константа>

Для оператора CASE, как и для оператора IF может быть определено значение как объединение функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]