"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Ветвление помогает алгоритму выбирать дальнейшие действия по результату проверки условия. Благодаря ему программа может по-разному обрабатывать исходные данные: например, сообщить, положительно ли число, или определить большее из двух чисел. Условие даёт один из двух результатов — истину или ложь. Если действие предусмотрено только для истины, ветвление неполное; если для обоих результатов — полное. Чтобы алгоритм работал правильно, нужно верно записать условие и не перепутать ветви.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Ветвление — способ организации алгоритма, при котором дальнейшие действия выбираются в зависимости от результата проверки условия. Оно нужно, когда одинаковая последовательность команд не подходит для всех исходных данных. Например, сообщение о результате может зависеть от того, положительное число или нет.
Условие — логическое выражение, которое при проверке принимает одно из двух значений: истина или ложь. Примеры условий: x > 0, a = b. Условие нужно, чтобы алгоритм мог однозначно определить, какую ветвь выполнять.
Неполное ветвление — конструкция, в которой действие выполняется только при истинном условии, а при ложном переходят к следующему шагу. Оно подходит, если при ложном результате ничего особенного делать не требуется. Так алгоритм не содержит лишних команд.
Полное ветвление — конструкция, в которой для истинного и ложного результатов условия предусмотрены разные действия. Оно нужно, когда алгоритм должен обработать оба возможных случая. Например, вывести одно сообщение при положительном числе, а другое — при неположительном.
Проверка условия нужна, чтобы алгоритм учитывал исходные данные, а не выполнял одну и ту же команду во всех случаях. Сначала вычисляется логическое выражение: результатом становится истина или ложь. Например, условие x > 0 истинно для положительного числа и ложно для нуля или отрицательного числа. Поэтому дальнейшие команды выбираются уже после сравнения.
В неполном ветвлении алгоритм сначала проверяет условие, а затем выполняет действие только при истинном результате. Если условие ложно, команда внутри ветви пропускается, и работа продолжается со следующего шага. Такая конструкция удобна, если случай «иначе» не требует отдельной обработки. Например, сообщение можно вывести только тогда, когда число положительно.
Полное ветвление разделяет ход алгоритма на два случая: при истине выполняется первая группа команд, при лжи — другая. После выполнения выбранной группы поток команд снова продолжается дальше. Это позволяет явно обработать оба результата и не оставлять неопределённым, что делать при отрицательном ответе проверки. В записи условного оператора эти части обычно обозначают словами «если», «то» и «иначе».
Одну и ту же логику можно представить словами, блок-схемой или условным оператором. В словесной записи описывают проверку и действия для каждого результата; в блок-схеме условие помещают в ромб, а выходы ведут к командам. В операторе «если условие, то действие 1, иначе действие 2» условие соответствует ромбу, а действия — ветвям. Сопоставление этих частей помогает заметить, если в одной форме записи случайно изменился смысл алгоритма.
Вложенное ветвление позволяет проверить дополнительное условие внутри одной из уже выбранных ветвей. Это полезно, когда сначала нужно разделить данные на крупные группы, а затем рассмотреть случаи внутри одной группы. Порядок проверок важен: неверно выбранное первое условие может увести выполнение в ветвь, где нужная проверка уже не выполняется. Поэтому для каждого возможного набора данных полезно проследить путь от первой проверки до результата.
| Характеристика | Неполное ветвление | Полное ветвление |
|---|---|---|
| Что происходит при истинном условии | Выполняется предусмотренное действие | Выполняется действие для истины |
| Что происходит при ложном условии | Ветвь пропускается, алгоритм продолжается | Выполняется действие для лжи |
| Количество предусмотренных действий | Действие задано только для истины | Заданы действия для обоих результатов |
| Представление на блок-схеме | Ромб с условием; команда на ветви «да», ветвь «нет» идёт дальше | Ромб с условием; обе ветви ведут к своим действиям |
| Запись условного оператора | если условие, то действие | если условие, то действие 1, иначе действие 2 |
Сначала определите, нужен ли отдельный шаг для ложного результата: если нет, достаточно неполного ветвления. Затем сравните число предусмотренных действий и направление стрелок на схеме. Такая проверка помогает увидеть, соответствует ли запись алгоритма его замыслу.
Задача: дано число x. Составить алгоритм, который выводит сообщение, если x положительно. Здесь не требуется отдельное сообщение для неположительного числа, поэтому подходит неполное ветвление.
Выбираем условие x > 0. Оно истинно, когда число больше нуля, и ложно для нуля и отрицательных чисел. Граница важна: ноль не является положительным числом.
Помещаем вывод сообщения «Число положительное» в ветвь истинного условия. Для ложного результата отдельную команду не задаём. Запись: если x > 0, то вывести «Число положительное».
Ответ: алгоритм выводит сообщение только при x > 0; в остальных случаях ничего не выводит.
Задача: даны два числа a и b. Определить и вывести большее из них. Чтобы алгоритм обработал оба результата сравнения, используем полное ветвление; равные числа тоже нужно учесть.
Сравниваем a и b условием a > b. Если оно истинно, больше число a, поэтому выводим a. Если оно ложно, число b не меньше a, и его можно вывести как большее из двух, в том числе при равенстве.
Записываем полный оператор: если a > b, то вывести a, иначе вывести b. Для проверки можно подставить, например, a = 7 и b = 4, а затем поменять числа местами. В обоих случаях должен выводиться больший элемент.
Ответ: условный оператор выбирает и выводит большее из чисел a и b; при равенстве выводится b, которое равно a.
Задача: даны три числа. Найти наибольшее из них. Удобно сначала сравнить первые два числа, сохранить большее, а затем сопоставить его с третьим. Такой порядок сокращает задачу до двух сравнений.
Обозначим числа a, b и c. Если a > b, временно принимаем a за наибольшее, иначе — b; при равенстве можно принять b, потому что он не меньше a. Полученное значение сохраним в переменной m.
Сравниваем m с c: если m > c, наибольшим остаётся m, иначе наибольшее значение — c. Проверка с «иначе» также правильно обрабатывает равенство. В конце выводим m, если он сохранился как максимум, или c, если он оказался не меньше m.
Ответ: последовательно выбираем большее из a и b, затем сравниваем его с c и выводим наибольшее значение. При составлении программы обе проверки можно оформить условными операторами, причём вторую поместить в нужную ветвь либо выполнить после первой с обновлённым m.
Ошибка — записать условие обычными словами, например «число положительное», и не уточнить, как именно его проверять. Так бывает, когда забывают, что результатом проверки должна быть истина или ложь. Запишите выражение вроде x > 0 и проверьте его на конкретных значениях, включая ноль.
В полной развилке иногда указывают действие только для истинного условия и забывают часть «иначе». Тогда алгоритм не объясняет, что делать при ложном результате. Перед завершением решения проверьте оба исхода условия и убедитесь, что для каждого выбран следующий шаг.
Можно перепутать ветви, неверно прочитав стрелки блок-схемы или части условного оператора. Ошибка часто возникает, если не проследить, какой выход из ромба означает «да», а какой — «нет». Подставьте набор данных с заведомо истинным условием и пройдите по стрелкам, затем повторите проверку для ложного результата.
При вложенных условиях команда может случайно оказаться не в той ветви. Это происходит, если теряется связь между проверкой и действиями, которые от неё зависят. Проверяйте алгоритм по отдельным примерам и для каждого отмечайте путь выполнения: от условия к ветви, затем к следующей команде.
Для работы с ветвлениями нужно уметь записывать алгоритмы и выполнять команды последовательно. Также нужны логические выражения и операции сравнения, которые задают условия. В одной программе ветвления сочетаются с последовательными действиями и циклами: цикл повторяет команды, а развилка выбирает подходящий вариант.
Условный оператор используют при изучении языков программирования и создании алгоритмов обработки данных. Он позволяет задавать реакцию программы на разные входные значения, поэтому нужен во многих практических задачах. Навык проверять все возможные случаи помогает делать программы понятнее и надёжнее.
Чем неполное ветвление отличается от полного?
При неполном ветвлении действие выполняется только тогда, когда условие истинно; при ложном результате алгоритм просто продолжает работу. При полном ветвлении предусмотрено отдельное действие и для истины, и для лжи.
Что может быть условием в алгоритме?
Условием служит логическое выражение, которое при проверке даёт истину или ложь. Например, x > 0 или a = b.
Что произойдёт, если условие окажется ложным?
При неполном ветвлении действие внутри ветви пропускается, и выполняется следующая команда. При полном ветвлении выполняется действие, указанное для ложного результата.
Как понять, к какой ветви относится команда на блок-схеме?
Найдите ромб с условием и проследите стрелку, по которой алгоритм приходит к команде. Обычно выходы из ромба подписаны «да» и «нет»: первая ветвь соответствует истине, вторая — лжи.
Можно ли помещать одно ветвление внутрь другого?
Да, это называется вложенным ветвлением: внутри одной ветви выполняется дополнительная проверка. Нужно следить, к какому условию относятся команды и в каком порядке проверяются условия.
§ 12. Алгоритмы с ветвящейся структурой