Выбирающий оператор

 

В Паскале два вида выбирающего оператора: условный оператор и оператор переключатель.

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.