В языке Pascal условный оператор начинается с ключевого слова if (если) и в общем виде выглядит так:
Выражение должно иметь стандартный тип boolean. Если выражение имеет значение True, то выполняется оператор, следующий за словом then. Если же выражение имеет значение False и часть else присутствует, выполняется оператор, следующий за словом else. Если часть else отсутствует, выполняется оператор, следующий за оператором if.
Пример.
…
if X<1.5 then
Z:=X+Y
else
Z:=1.5;
…
Обратите внимание! Перед else нет знака «;».
Синтаксическая двусмысленность возникает в конструкции
if e1 then if e2 then s1 else s2 , так как часть else s2 может трактоваться как принадлежащая «внешнему» оператору if e1 или вложенному оператору if e2 then.
Эта двусмысленность разрешается путем следующей интерпретации данной конструкции:
if e1 then
begin
if e2 then
s1
else
s2
end;
Правило: служебное слово else всегда ассоциируется с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else.
ОПЕРАТОР ВАРИАНТА
Данный оператор является обобщением условного оператора для случая произвольного числа альтернатив. Он сопоставляет различным значениям некоторого выражения соответствующие им операторы.
Пример.
…
case CurColor of
Red: X:=X+2;
Yellow: X:=Y-2;
Green: X:=Y
end;
…
CurColor – в примере это переменная перечислимого типа. Сначала вычисляется текущее значение переменной CurColor. Затем это значение сопоставляется (сравнивается) с константами, записанными перед операторами. При совпадении значения переменной с одной из констант будет выполнен оператор, помеченный данной константой. На этом выполнение оператора будет завершено. Если значение переменной CurColor не совпадает ни с одной из констант, то данный оператор не выполняет никаких действий. Для того, чтобы задать некоторые действия для случая такого несовпадения, можно использовать альтернативу else:
Пример.
…
case (K+1)*2 of
2: Add(A,B);
4: Multiply(A,B);
0: Subtract(A,B)
else
writeln(‘ошибка!’)
end;
…
Кроме одиночных констант в альтернативах оператора варианта могут быть заданы списки и/или диапазоны значений, которые в этом случае разделяются символом «,».
Пример.
…
case Switch of
1..2: begin Proc1; Proc2; Proc3 end;
3,4,10..20: Proc4;
5,6: Proc5;
else
Proc6;
Proc7;
end;
…
При использовании оператора варианта должны выполняться следующие правила:
1. Значения выражения-«переключателя», записанного после служебного слова case, должно принадлежать упорядоченному типу и иметь размер 1 байт или 1 слово.
2. Все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом выражения.
3. Все константы в альтернативах должны быть уникальны в пределах оператора варианта (то есть повторения констант в альтернативах не допускается); диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.
При необходимости задания нескольких операторов для каких-либо из альтернатив, следует сгруппировать их в составной оператор, в то время как ветвь else допускает последовательность операторов, разделенных символом «;».