БлогNot. Как понять "else относится к ближайшему if"...

Как понять "else относится к ближайшему if"...

...страдает человек, приводя в пример такой "шыдевр" с просторов инета:

Если сумма чисел X и Y меньше 100, то напечатать большее число, в противном случае напечатать меньшее число.
и его решение:

if x+y<100 then if x>y then writeln (x)
 else writeln (y)
 else if x<y then writeln (x)
 else writeln (y);

К какому же if относится здесь последнее else?

По-моему, ответ становится очевиден, если сформулировать основное правило вложения условных операторов полностью:

else всегда относится к ближайшему сверху оператору if, для которого ветка else еще не указана.

Кроме того, код примера можно отформатировать и наглядно:

if x+y<100 then
    if x>y then writeln (x)
    else writeln (y)
 else
    if x<y then writeln (x)
    else writeln (y);

Соответственно, код из пункта 7.7. этой главы учебника по Паскалю:

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;

будет работать абсолютно так же, если убрать лишние операторные скобки:

if x>0 then
   if y>0 then p:=1
   else p:=4
else
   if y>0 then p:=2
   else p:=3;

Они были включены в текст просто для наглядности.

25.01.2011, 13:09 [10831 просмотр]


теги: программирование pascal

К этой статье пока нет комментариев, Ваш будет первым