
Криворотова Л.Н. ТР 7.0. Основы программирования
Тема урока: Оператор варианта (выбора).
Оставим пока числовые последовательности, их существует большое многообразие, и позднее мы к ним вернемся.
А сейчас попробуем решить следующую задачу:
Составить программу, которая в зависимости от порядкового номера дня недели (1, 2, …, 7) выводит на экран его название (понедельник, вторник, …, воскресенье).
Для этого воспользуемся условным оператором.
Var x: integer;
Begin
Write (‘введите число от 1 до 7');
Readln(x);
If x=1 then writeln (‘понедельник’);
If x=2 then writeln (‘вторник’);
If x=3 then writeln (‘среда’);
If x=4 then writeln (‘четверг’);
If x=5 then writeln (‘пятница’);
If x=6 then writeln (‘суббота’);
If x=7 then writeln (‘воскресенье’);
Readln
End.
А если бы речь шла о названия месяца, то операторов пришлось бы использовать еще больше, так как условный оператор позволяет осуществлять ветвление программы только по двум направлениям, одно из которых соответствует выполнению проверяемого условия, а другое – невыполнению этого же условия. А если для переменной необходимо выполнить в зависимости от условий ряд действий придется использовать вложенные операторы или несколько операторов подряд.
В таком случае лучше подойдет оператор ВАРИАНТА (или ВЫБОРА).
Если условный оператор напоминает дорожную развилку, то оператор выбора – это разделение пути на множество дорог, по одной из которых пойдет выполнение программы.
Часто приходиться иметь дело с более многообразными ситуациями, когда из многих возможных вариантов приходиться выбирать что-то одно.
Например: выбор учебного заведения, выбор костюма, и т.д.
Оператор варианта в таких ситуациях может быть использован именно тогда, когда выполнение одного из нескольких действий зависит от значения выражения порядкового типа. Т.е. тех типов, количество значений которых можно чётко указать, а сами значения перечислить. (Это целочисленные типы, символьный, логический, перечисляемый, интервальный типы).
Оператор варианта
Формат записи:
Оператор варианта
|
Множественное ветвление:
|
Case k Of
K1: <оператор 1>;
K2: <оператор 2>;
…
KN: <оператор N>;
[ Else <оператор>;]
End;
|
|
Где k – переменная и ли выражение порядкового типа,
K1, K2, …, KN – метки-константы, совпадающие по типу с величиной k.
Выражение порядкового типа вычисляется, и его значение отыскивается в одном из списков констант. После этого выполняется соответствующий оператор. Затем управление передается за пределы оператора выбора. Если значение выражения не совпало ни с одной из меток-констант, то выполняется оператор из строки ELSE, если он есть. Сокращенная форма оператора не содержит ELSE. В таком случае управление передается на оператор, следующий за End. Метки оператора варианта могут быть константами любого типа, но их тип должен совпадать с типом выражения.
Примечание
-
Тип константы должен совпадать с типом выражения.
-
Ветвь ELSE заключена в квадратные скобки, что говорит о том, что эта часть оператора выбора необязательна (сокращенная форма).
-
В конструкции выбора, в отличие от условного оператора, перед ELSE ставится точка с запятой.
-
Если при выборе альтернативы необходимо выполнение нескольких операторов, то нужно заключить их в операторные скобки BEGIN . . . END;, т.е. использовать составной оператор.
-
Можно задавать не только одну константу, но и список, и диапазон констант.
Решение задач. Применение изученного материала:
№1. Теперь код нашей программы будет выглядеть иначе:
Var x: byte;
Begin
Write (‘введите число от 1 до 7');
Readln(x);
Case x of
1: writeln (‘понедельник’);
2: writeln (‘вторник’);
3: writeln (‘среда’);
4: writeln (‘четверг’);
5: writeln (‘пятница’);
6: writeln (‘суббота’);
7: writeln (‘воскресенье’);
End;
Readlyn
End.
№2. При использовании оператора CASE можно использовать диапазон допустимых значений параметра. Например, чтобы определить, введена ли как символьная переменная цифра, можно написать:
CASE I OF
‘0’.. .’9’: writeln (‘цифра’);
ELSE writeln (‘не цифра’)
END;
№3. Составьте алгоритм на языке блок-схем для вывода времени года (зима, весна, лето, осень) по введённому номеру месяца. Напишите программу.