Вложенные конструкции if-else

Следует быть внимательными при использовании вложенных операторов 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 (первый вариант) конструкция получается логически более понятной.

Задачи к данной теме

Комментарии

перед else;

почему перед else не ставится точка с запятой?

потому что операция на этом

потому что операция на этом не заканчивается, ";" для того что бы закончить операцию.

перед else;

Потому что это как предложение. Как нельзя ставит точку в середине предложение так и нельзя ставит точка с запятой перед else.

Вообще-то правильный ответ:

Вообще-то правильный ответ: "Потому что таков синтаксис языка Паскаль". Так как например в Си перед else точка с запятой ставится.