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

2.3.2. Оператор case

Рассмотренный выше оператор IF позволяет осуществить выбор од­ной из двух альтернатив. Но что если число вариантов нужно иметь больше? Например, если требуется согласно номерам дней недели ото­бражать на экране их названия? Многие начинающие программисты для решения подобной задачи предпочтут воспользоваться последова­тельностью операторов IF:

if х=1 then write (понедельник);

if х=2 then write (вторник);

if x=3 then write (среда);

if x=4 then write (четверг);

if x=5 then write (пятница);

if x=6 then write (суббота);

if x=7 then write (воскресенье);

Однако такой подход затрудняет понимание исходного текста про­граммы, поскольку сразу неочевидно, что здесь будет выполнен один и только один из семи операторов IF. Кроме того, такая конструкция ма­лоэффективна, поскольку при этом условие придется проверять во всех семи операторах IF и это неизбежно увеличит время выполнения про­граммы.

Целесообразнее воспользоваться вложенным оператором IF. Один вложенный оператор часто будет выполняться быстрее последователь­ности из нескольких операторов IF, поскольку при совпадении первого условия управление сразу передается следующему (после вложенного) оператору, без проверки оставшихся условий, но такая конструкция чересчур громоздка. (Считается, что в операторе IF допустимы не более двух-трех уровней вложения.) Здесь всего семь альтернатив, а что если вариантов выбора потребуется иметь несколько десятков? Применение оператора IF в этом случае крайне неудобно. Выйти из положения позволяет оператор CASE.

Оператор case имеет вид

case р of

a: s1;

b:s2;

n:sn;

else s(n+1)

end;

При выполнении этого оператора сначала вычисляется некоторое выражение Р, называемое селектором выбора, а затем, в зависимости от полученного значения (если оно равно одной из констант А, В, ..., N, ко­торые называются константами выбора), выполняется один из опера­торов: S1, S2,..., Sn, - помеченный соответствующей константой. Причем каждый из этих операторов может быть составным. Операторы S1, S2, ..., Sn отделяются один от другого точками с запятой. Значение селектора выбора в операторе CASE может повторяться, однако в этом случае будет выполнена только первая подходящая ветвь, а затем управление передается следующему (после CASE) оператору в программе.

Если значение выражения Р не совпадает ни с одной из констант вы­бора, выполняется оператор S(n+1), содержащийся после ключевого слова ELSE, причем ветвь ELSE в операторе CASE необязательна. Использо­ванные здесь зарезервированные слова CASE, OF, ELSE и END имеют смысл вариант, из, иначе и конец соответственно.

Выражение, играющее роль селектора выбора, должно принадле­жать порядковому типу данных (т.е. типу, имеющему конечное число значений). К порядковым относятся, например, типы данных Integer, Boolean и Char. Однако тип Real порядковым не является.

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

case x of

1..5: sl

2, 3, 8:s2

4, 6, 9..13:s3

else

s4

end;

Так, в этом примере оператор s3 будет выполнен, если переменная X имеет одно из значений: 4, 6, 9, 10, 11, 12, 13.

Вернемся теперь к предыдущему примеру вложенного оператора IF (отображение названий дней недели). Попробуем реализовать эту задачу с помощью оператора CASE. Вот как это должно выглядеть:

case x of

1:write ('понедельник');

2:write ('вторник');

3:write ('среда');

4:write ('четверг');

5:write ('пятница');

6:write ('суббота');

7:write ('воскресенье');

end;

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