"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Ветвление позволяет программе выбирать дальнейшие действия в зависимости от результата проверки условия. В Паскале для этого используют оператор if: при истинном условии выполняется одна ветвь, при ложном — другая или никакая. Условие должно быть логическим выражением со значением True или False. Разберём неполную и полную формы оператора, научимся объединять несколько команд в ветвь и составлять условия для решения задач.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Ветвление — способ организации алгоритма, при котором дальнейшие действия выбираются в зависимости от результата проверки условия. Оно нужно, чтобы программа могла по-разному реагировать на данные, например отдельно обработать положительное и отрицательное число.
Условный оператор — оператор Паскаля if, который проверяет условие и выполняет одну из ветвей программы. Он позволяет записать выбор действий прямо в алгоритме: программа сама определяет, какая команда нужна в конкретной ситуации.
Составной оператор — несколько операторов, объединённых словами begin и end и воспринимаемых как единое действие. Он нужен, когда в выбранной ветви требуется выполнить не одну, а несколько команд, например вычислить результат и вывести его.
Логическое выражение — выражение, результатом которого является значение True или False; его используют как условие ветвления. Благодаря такому результату программа может однозначно выбрать, выполнять ли команду после then или перейти к другой ветви.
Ветвление появляется тогда, когда алгоритму нужно учитывать разные ситуации. Например, способ обработки числа зависит от того, больше оно нуля, меньше или равно ему. Сначала программа проверяет условие, а затем продолжает работу по подходящему пути. Без такой проверки пришлось бы выполнять одинаковые действия при любых входных данных.
В Паскале условие записывают после if, а then отделяет его от команды, которая выполняется при истинном результате. Такая запись помогает компьютеру различить проверку и действие: сначала он вычисляет логическое выражение, а потом выбирает, запускать ли команду. Слово else указывает действие для ложного результата. Поэтому порядок if, условие, then и else важен для понимания структуры оператора.
В неполной форме if ... then команда запускается только при истинном условии. Если выражение оказалось ложным, программа не выполняет команду после then и переходит к следующему оператору. Такая форма удобна, когда для одного исхода нужно особое действие, а для другого ничего менять не требуется. Например, сообщение можно вывести только при обнаружении ошибки.
В полной форме if ... then ... else программа получает команды для обоих исходов проверки. При истинном условии выполняется команда после then, а при ложном — после else; одновременно обе ветви не выполняются. Эта форма подходит, когда алгоритм должен выбрать ровно один из двух вариантов. Так можно вывести одно сообщение для чётного числа, а другое — для нечётного.
Если для выбранного исхода требуется несколько действий, их заключают между begin и end: вместе они образуют составной оператор. Условия строят с помощью операций сравнения, например =, < и >, а несколько проверок соединяют логическими операциями and, or или not. Сравнение отвечает на вопрос об отношении значений, а логическая операция помогает проверить сочетание требований. Например, условие a > 0 and a < 10 истинно, когда a находится между нулём и десятью, не включая границы.
| Форма | Запись | Действие при истинном условии | Действие при ложном условии |
|---|---|---|---|
| Неполная | if условие then оператор | Выполняется оператор после then | Оператор после then пропускается |
| Полная | if условие then оператор1 else оператор2 | Выполняется оператор1 | Выполняется оператор2 |
Сначала определи, нужны ли действия для одного исхода или для обоих: это подскажет, какую форму выбрать. Затем проверь, что условие даёт True или False, а команды стоят в нужных ветвях. Если в ветви несколько действий, объедини их с помощью begin и end.
Задача 1. Нужно вывести сообщение «Положительное», если введённое число больше нуля. Для остальных чисел выводить это сообщение не требуется, поэтому достаточно неполной формы условного оператора. Сравним введённое значение с нулём и поместим вывод сообщения после then.
Ответ: фрагмент программы — if n > 0 then writeln('Положительное'). Он выводит сообщение только при положительном значении n.
Задача 2. Для введённого целого числа требуется вывести «Чётное» или «Нечётное». Здесь нужно обработать оба результата проверки, поэтому используем полную форму if ... then ... else. Целое число чётное, если остаток от деления на 2 равен нулю.
Ответ: if n mod 2 = 0 then writeln('Чётное') else writeln('Нечётное'). Для любого целого n выполнится ровно одна из двух команд вывода.
Задача 3. По двум введённым числам нужно вывести большее, а при равенстве сообщить об этом. Возможны три исхода: первое число больше, второе больше или числа равны. Поэтому одной проверки недостаточно: после проверки первого случая потребуется проверить второй.
Ответ: if a > b then writeln(a) else if b > a then writeln(b) else writeln('Числа равны'). Вложенная проверка выбирает большее или распознаёт равенство.
Точка с запятой перед else завершает оператор if, и Паскаль уже не связывает else с проверкой после if. Её часто ставят по привычке после каждой команды, не учитывая структуру полной формы. Проверь, что между командой после then и словом else нет точки с запятой. Завершать оператор нужно после всей конструкции, включая ветвь else.
Если в ветви несколько операторов, а begin и end пропущены, к условию обычно относится только первая команда. Остальные могут выполняться независимо от результата, из-за чего программа ведёт себя не так, как задумано. Перед запуском посчитай команды в каждой ветви: если их больше одной, объедини их в составной оператор. Проверь, что end закрывает нужный блок.
Знаки := и = легко перепутать, потому что оба встречаются рядом с переменными. Но := присваивает переменной значение, а =, < и > сравнивают значения и дают логический результат. В условии нужно проверить отношение, поэтому просмотрев каждое выражение после if, убедись, что там стоит сравнение, а не присваивание. Присваивание обычно записывают отдельной командой.
Во вложенных конструкциях можно неверно определить, к какому if относится else. По правилу Паскаля он связывается с ближайшим незавершённым if, поэтому без внимательного чтения ветви легко понять неправильно. Проверь вложенность по begin и end и проследи путь программы при истинном и ложном результатах. Если структура сложная, явно выдели составные блоки, чтобы связь ветвей была заметна.
Для работы с ветвлениями нужны основы записи программ на Паскале: переменные хранят данные, а операторы ввода и вывода позволяют получить значения и показать результат. Условия составляют из операций сравнения и логических операций and, or, not, поэтому нужно понимать их смысл. Условные операторы затем используют внутри циклов, чтобы выбирать действия на каждом шаге. Они также помогают обрабатывать разные случаи и строить более сложные программы.
Чем неполная форма условного оператора отличается от полной?
В неполной форме if ... then действие предусмотрено только для истинного условия. В полной форме if ... then ... else есть действия для обоих исходов, и программа выполняет одну из двух ветвей.
Можно ли записать несколько операторов после then?
Да, но несколько команд нужно объединить в составной оператор: поставить перед ними begin, а после них — end. Так Паскаль воспринимает их как одну ветвь.
Почему перед else нельзя ставить точку с запятой?
Точка с запятой завершает оператор if, поэтому else после неё уже не будет связано с then. В полной форме точку с запятой ставят после всего оператора, то есть после ветви else.
Как записать условие, в котором нужно проверить сразу несколько требований?
Отдельные проверки соединяют логическими операциями and (и), or (или) и not (не). Например, a > 0 and a < 10 проверяет, что число a больше нуля и меньше десяти.
К какому if относится else во вложенной конструкции?
Обычно else относится к ближайшему if, у которого ещё нет своей ветви else. Чтобы не запутаться, выделяй вложенные ветви с помощью begin и end и внимательно проверяй структуру программы.
§ 13. Программирование ветвлений на Паскале