Как понять "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 [10900 просмотров]