Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОАП.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

6.2 Оператор выбора case

З апись оператора выбора

CASE K OF

A1 : серия 1;

A2 : серия 2;

...

AN : серия N

ELSE серия N + 1

END;

Индекс выбора К состоит из выражения. Элементы списка выбора включают список операторов, каждый из которых помечен одной или несколькими константами выбора. Все константы выбора А1, А2,…,АN должны быть различными, а их тип должен быть идентичен типу выражения (индекса выбора ). В качестве типа выражения К, следовательно и констант выбора можно использовать любой простой тип, за исключением типа REAL.

Выполнение оператора выбора: вначале вычисляется значение индекса выбора. Затем выбирается для выполнения тот оператор из списка элементов выбора, который помечен константой выбора, имеющей данное значение. Если константы с таким значением нет, то возникает ошибка, и выполнение всей программы завершается аварийно.

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

Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки begin..end).

Задача 1. В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая позволяет ввести номер года и печатает его название по старояпонскому календарю. Справка: 1996 г. — год крысы — начало очередного цикла.

Поскольку цикл является двенадцатилетним, поставим название года в соответствие остатку от деления номера этого года на 12.

Program Goroskop;

Var Year : Integer;

Begin

Write('Введите год '); ReadLn(Year);

CASE Year MOD 12 OF

0 : WriteLn('Год Обезьяны');

1 : WriteLn('Год Петуха');

2 : WriteLn('Год Собаки');

3 : WriteLn('Год Свиньи');

4 : WriteLn('Год Крысы');

5 : WriteLn('Год Коровы');

6 : WriteLn('Год Тигра');

7 : WriteLn('Год Зайца');

8 : WriteLn('Год Дракона');

9 : WriteLn('Год Змеи');

10 : WriteLn('Год Лошади');

11 : WriteLn('Год Овцы')

END;

END.

Задача 2. Найти наибольшее из двух действительных чисел, используя оператор выбора.

Program Maximum;

Var Max, X, Y : Real;

Begin

Write('Введите два неравных числа:');

ReadLn(X, Y);

Case X > Y Of

TRUE : Max := X;

FALSE : Max := Y

End;

WriteLn('Максимальное из двух есть ', Max : 12 : 6)

End.

Задача 3. Преобразовать символ, если он является строчной русской буквой, в заглавную букву.

Так как в альтернативной системе кодировки ASCII строчные русские буквы идут не подряд, а с некоторым разрывом, то в данном случае, в зависимости от того, в какую часть таблицы попадает введенная буква, используется та или иная формула. Если введённый символ не является строчной русской буквой, он выводится без изменения.

Program UpCase;

Var C : Char;

Begin

Write('Введите символ:');

ReadLn(C);

Case C Of

'а'..'п' : C := Chr(Ord(C) - 32);

'р'..'я' : C := Chr(Ord(C) - 80)

End;

WriteLn(C);

End.

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

6.3 Метка. Оператор перехода. Пустой оператор

Каждый оператор в программе может быть помечен меткой - целым числом без знака, содержащим не более четырех цифр. Ведущие незначащие нули не влияют на значение метки. Поэтому метки 5, 05, 005, 0005 считаются одинаковыми. Метка располагается перед оператором и отделяется от него двоеточием.

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

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

Оператор перехода прерывает естественный порядок выполнения операторов. Он состоит из ключевого слова GOTO, за которым следует метка. Дальнейшее выполнение программы должно продолжаться, начиная с оператора, помеченного указанной меткой.

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

Пример: Написать программу «Пароль»

Program Parol;

Label m;

Const par=’Пароль’;{Это пароль для входа в систему}

Var P : Char;

Begin

M: Write('Введите пароль:');

ReadLn(P);

If P<>Par then begin

WriteLn(‘Вы ошиблись. Повторите ввод!’);

Goto m;

End

Else WriteLn(‘Добро пожаловать!’);

End.

Контрольные вопросы и задания

  1. Когда возникает необходимость в организации развилки?

  2. Какая развилка называется полной? неполной?

  3. Выражение какого типа может выступать в качестве условия при организации развилки? Какие значения принимают такие выражения?

  4. Могут ли в полной развилке не выполниться операторы ни по одной из ветвей? выполниться по обеим ветвям?

  5. Записать примеры 1-3 по теме "Оператор выбора" с помощью условного оператора. Сколько развилок понадобилось в каждом из случаев?

  6. В каком случае целесообразно использовать оператор выбора?

  7. Какого типа может быть выражение, являющееся селектором выбора? Приведите примеры.

  8. Используя оператор выбора решить задачу: "Определить знак заданного целого числа".

  9. Приведите пример оператора выбора, где выражение-селектор выбора имеет перечислимый тип.