Выбирающий оператор
В Паскале два вида выбирающего оператора: условный оператор и оператор переключатель.
1. Условный оператор используется при кодировании развилок, то есть для организации бинарного ветвления.
При отсутствии ветви еlse условный оператор будем называть неполным. После ключевых слов then и еlse синтаксис требует наличия только одного оператора. Если же по какой-либо ветви нужно выполнить несколько операторов, то следует использовать составной оператор. Перед еlse точка с запятой недопустима, так как в этом случае между then и else будут два оператора, один из которых пустой.
Если оператор, выполняемый по ветви then или еlse, является условным, то говорят о вложенных условных операторах. В случае вложенных условных операторов каждое еlse относится к ближайшему предшествующему then.
Примеры вложенных условных операторов (каждое else рекомендуется располагать под соответствующим then):
a) Оператор присваивает переменной max maximum{a, b, c}:
if a>b then if a>c then max:=a
else max:=c
else if b>c then max:=b
else max:=c ;
б) Оператор, эквивалентный приведенной слева развилке, имеет вид
if a>b then
begin
if a>c then a:=0
end
else a:=1;
В приведенном примере вложенный условный оператор - неполный, поэтому он заключен в операторные скобки. При отсутствии операторных скобок неполным будет внешний оператор.
2.Оператор переключатель предназначен для организации множественного ветвления.
Синтаксическая диаграмма переключателя:
-
Выражение после ключевого слова case называется селектором. Селектор должен иметь упорядоченный тип, кроме типа longint. Константы называются метками случаев. они должны относиться к тому же типу, что и переключатель.
Работа оператора сase заключается в следующем. Вычисляется значение селектора. Если это значение совпадает с одной из меток случаев, то выполняется оператор, записанный после нее. Если значение селектора не совпало ни с одной из меток случаев, то выполняется оператор, следующий за еlse. Если ветвьеlse отсутствует, то управление передается оператору, следующему за переключателем. Диапазоны и метки случаев не должны пересекаться.
В качестве примера рассмотрим программу для определения экзаменационной оценки по количеству набранных абитуриентом баллов. Оценка выставляется по правилам, приведенным в таблице:
Балл (b) | Оценка |
bÎ[0; 4] | |
bÎ[4.25; 7] | |
bÎ[7.25; 9.25] | |
bÎ[9.5; 10] |
Program ball_to_ mark;
Var b: real;
m: 2..5;
begin write (‘Введите количество баллов ‘);
read(b);
case round (b*4) of {селектор должен иметь упорядоченный тип}
0..16: m:=2; {границы диапазонов из таблицы умножены на 4}
17..28: m:=3;
29..37: m:=4
else m:=5
end;
writeln(b, ‘ баллов - оценка ‘, m)
end.