Следует быть внимательными при использовании вложенных операторов if. Предпочтительнее пользоваться схемой else-if (т.е. вкладывать во внешнюю ветку else), а не then-if (т.е не вкладывать во внешнюю ветку if). Так как в последнем случае придется следить за тем, к какой ветке относится соответствующее else. Пренебрежение этим правилом приводит к нагромождению закрывающих else.
Сравните две программы ниже. Они делают одно и то же. Однако предпочтительной является первая.
else-if
var
a: integer;
begin
write('Введите целое число: ');
readln(a);
if a = 0 then
writeln('zero')
else
if a = 1 then
writeln('one')
else
if a = 2 then
writeln('two')
else
writeln('unknown');
readln
end.
then-if
var
a: integer;
begin
write('Введите целое число: ');
readln(a);
if a <> 0 then
if a <> 1 then
if a <> 2 then
writeln('unknown')
else
writeln('two')
else
writeln('one')
else
writeln('zero');
readln
end.
При использовании второго варианта надо помнить следующее общее правило: каждый else относится к ближайшему предшествующему if, еще не имеющему парного else.
При вложении в ветвь else (первый вариант) конструкция получается логически более понятной.