Когда после ключевых слов then и else вновь используются условные операторы, они называются вложенными. Число вложений может быть произвольно, при этом действует правило: else всегда относится к ближайшему then. Часто вложением полных условных операторов можно заменить использование составного.
Пр. Определить, в какой координатной четверти находится точка с координатами (x,y), не лежащая на осях координат.
Вариант 1 – без использования вложений
if (x>0) and (y>0) then p:=1
else if (x<0) and (y>0) then p:=2
else if (x<0) and (y<0) then p:=3
else p:=4;
Вариант 2 – с вложениями
if x>0 then begin
if y>0 then p:=1
else p:=4;
end
else begin
if y>0 then p:=2
else p:=3;
end;
В первом фрагменте программе проверяется от 2 до 6 условий, во втором – всегда только 2 условия. Здесь использование вложений дало существенный выигрыш в производительности.
Пр 2. Вычислить значение y, равное знаку числа x.
Способ 1:
if x>1 then y:=1
else if x=0 then y:=0
else y:=-1;
Способ 2:
if x>1 then y:=1
else begin
if x=0 then y:=0
else y:=-1;
end;
Здесь в обеих вариантах проверяется не более 2 условий, способы примерно равноценны.
|
|
Оператор выбора. Для случаев, когда требуется выбор одного значения из конечного набора вариантов, оператор if удобнее заменять оператором case:
case выражение of
список1: оператор1;
список2: оператор2;
...
списокN: операторN;
else оператор0;
end;
Оператор выполняется так же, как составной условный оператор.
Выражение должно иметь порядковый тип (целый или символьный). Элементы списка перечисляются через запятую, ими могут быть константы и диапазоны значений того же типа, что тип выражения. Диапазоны указываются в виде:
Мин.значение.. Макс.значение
В диапазон входят все значения от минимального до максимального включительно.
Пр. По номеру месяца m определить число дней d в нем.
case m of
1,3,5,7..8,10,12: d:=31;
2: d:=28;
4,6,9,11: d:=30;
end;
Пр. По символу c определить и вывести, к какому классу символов он относится.
case c of
'A'..'Z','a'..'z': writeln ('Лат.буква');
'А'..'Я','а'..'п','р'..'я': writeln ('Рус.буква');
'0'..'9': writeln ('Цифра');
else writeln ('Другой символ');
end;
Здесь отдельные диапазоны для русских букв от "а" до "п" и от "р" до "я" связаны с тем, что между "п" и "р" в кодовой таблице DOS находится ряд не-буквенных символов (см. Приложение 1).
Если по ветви оператора case нужно выполнить несколько операторов, действует то же правило, что для оператора if (ветвь заключается в операторные скобки begin…end;).