Условный оператор if, then, else и составной оператор

Урок учит программу принимать решения с помощью условного оператора if/then/else и группировать команды составным оператором.

Условный оператор if выполняет одни команды, если условие истинно, и другие — если ложно.

Зачем программе принимать решения

Пока наши программы шли строго по прямой: команда за командой, всегда одинаково. Но жизнь полна развилок. «Если на улице дождь — возьми зонт, иначе надень кепку». «Если оценка ниже 3 — пересдача, иначе зачёт». Программа тоже должна уметь выбирать путь в зависимости от данных. Эта способность называется ветвлением, и без неё невозможна ни одна интересная программа.

В Паскале за ветвление отвечает условный оператор — конструкция if ... then ... else. По-английски это буквально «если ... то ... иначе», так что читается она почти как обычное предложение.

Простое if без else

Самая короткая форма — сделать что-то только при выполнении условия:

var
  age: integer;
begin
  age := 20;
  if age >= 18 then
    writeln('Вы совершеннолетний');
end.

Читается так: «если age больше или равно 18, то напечатать сообщение». Если условие age >= 18 истинно — команда после then выполнится. Если ложно — она будет пропущена, и программа пойдёт дальше. Обратите внимание: перед then точку с запятой не ставят — это одна цельная конструкция.

Для сравнения Паскаль использует знакомые знаки: = (равно), <> (не равно), <, >, <=, >=. Запомните: сравнение на равенство — это одинарное =, не путайте с присваиванием :=.

Полная форма if-then-else

Чаще нужно выбрать одно из двух действий. Тогда добавляют ветку else («иначе»):

var
  n: integer;
begin
  n := 7;
  if n mod 2 = 0 then
    writeln('Число чётное')
  else
    writeln('Число нечётное');
end.

Если условие истинно — выполнится ветка после then, иначе — ветка после else. Выполнится ровно одна из двух, никогда обе сразу. Очень важная деталь синтаксиса: перед else точку с запятой не ставят! Это самая частая ошибка новичков. Конструкция if-then-else — единое целое, и точка с запятой перед else разрывает её. Запустите аналог на Python:

n = 7
if n % 2 == 0:
    print('Число чётное')
else:
    print('Число нечётное')

Вывод:

Число нечётное

Составной оператор: begin и end

А что, если при выполнении условия нужно сделать несколько команд, а не одну? После then можно поставить только одну команду. Решение — объединить несколько команд в одну группу с помощью begin и end. Такая группа называется составным оператором и для Паскаля считается единой командой:

var
  temp: integer;
begin
  temp := -5;
  if temp < 0 then
  begin
    writeln('На улице мороз!');
    writeln('Надень шапку и перчатки');
    writeln('Температура: ', temp);
  end
  else
    writeln('Тепло, можно гулять');
end.

Здесь при temp < 0 выполнятся все три команды внутри begin...end. Обратите внимание: после закрывающего end перед else точки с запятой снова нет. Составной оператор — ваш главный инструмент: он позволяет «упаковать» сколько угодно команд туда, где синтаксис ждёт одну.

temp = -5
if temp < 0:
    print('На улице мороз!')
    print('Надень шапку и перчатки')
    print('Температура:', temp)
else:
    print('Тепло, можно гулять')

Вывод:

На улице мороз!
Надень шапку и перчатки
Температура: -5

Вложенные условия и else if

Иногда вариантов больше двух. Например, перевести числовой балл в словесную оценку. Тогда условия вкладывают друг в друга через else if:

var
  score: integer;
begin
  score := 75;
  if score >= 90 then
    writeln('Отлично')
  else if score >= 70 then
    writeln('Хорошо')
  else if score >= 50 then
    writeln('Удовлетворительно')
  else
    writeln('Нужно подтянуть');
end.

Программа проверяет условия сверху вниз и выполняет ветку первого истинного условия, остальные пропускает. Порядок важен: проверки идут от самого строгого к самому мягкому. Запустите аналог:

score = 75
if score >= 90:
    print('Отлично')
elif score >= 70:
    print('Хорошо')
elif score >= 50:
    print('Удовлетворительно')
else:
    print('Нужно подтянуть')

Вывод:

Хорошо

Попробуй сам

Напишите программу, которая по введённому числу определяет его знак: положительное, отрицательное или ноль. Понадобятся три ветки через if-else if-else. Проверьте логику на Python (число 0 для примера):

n = 0
if n > 0:
    print('Положительное')
elif n < 0:
    print('Отрицательное')
else:
    print('Ноль')

Вывод:

Ноль

Частые ошибки

  • Точка с запятой перед else. Запись writeln('...'); прямо перед else разрывает оператор — среда выдаст ошибку «else без if». Перед else точки с запятой быть не должно.
  • Забыли begin/end для нескольких команд. Без них после then к условию относится только первая команда, остальные выполнятся всегда. Группируйте составным оператором.
  • Сравнение через := вместо =. В условии равенство проверяется одинарным =: if x = 5 then. := здесь ошибка.
  • then после условия. Не забывайте слово then — без него условие не работает.

Итоги

  • Условный оператор if условие then ... else ... выбирает путь выполнения в зависимости от истинности условия.
  • Перед then и перед else точку с запятой не ставят — это единая конструкция.
  • Несколько команд в ветке объединяют в составной оператор begin ... end.
  • Для более чем двух вариантов используют цепочку else if; выполняется ветка первого истинного условия.
  • Сравнение на равенство — одинарное =, не путать с присваиванием :=.
Проверьте себя
1. Где НЕЛЬЗЯ ставить точку с запятой в конструкции if-then-else?
AВ конце всей программы
BПеред словом else
CПосле begin внутри тела программы
DМежду двумя командами в составном операторе
2. Как выполнить несколько команд в одной ветке условия?
AПеречислить их через запятую после then
BОбъединить их в составной оператор begin...end
CНаписать несколько then подряд
DЭто невозможно, в ветке только одна команда
3. Каким знаком проверяется равенство в условии Паскаля?
A:=
B==
C=
Dequals
Поддержать проект