Перейти к основному содержимому

Ветвление

Ветвление в алгоритме робота

Коротко

Ветвление позволяет программе выбрать один из нескольких путей. Программа проверяет условие и выполняет разные команды в зависимости от результата.

Зачем это нужно

Линейная программа выполняет команды по порядку и не меняет поведение. Для робота этого быстро становится мало. Если впереди препятствие, нужно остановиться или повернуть. Если линия ушла влево, нужно изменить скорость колес. Если кнопка не нажата, стартовать нельзя. В каждой такой ситуации программа должна задать вопрос и выбрать действие.

Ветвление превращает робота из устройства с жестким сценарием в систему, которая реагирует на обстановку. При этом выбор не появляется сам по себе: программист должен явно записать условие и команды для разных случаев.

Главная идея

Ветвление строится вокруг вопроса, на который можно ответить "да" или "нет".

условие?
да -> выполнить один набор команд
нет -> выполнить другой набор команд

Блок-схема ветвления

Формальная блок-схема показывает обе ветки и место, где они снова объединяются.

Формальная блок-схема полного ветвления

В блок-схемах условие обычно рисуют ромбом. Из ромба выходят две стрелки: одна для случая, когда условие истинно, другая для случая, когда условие ложно.

Что такое условие

Условие - это выражение, которое программа проверяет. Результат проверки обычно можно прочитать как истина или ложь, да или нет, 1 или 0.

Условие в коде

В Python ветвление записывают через if:

if distance < 20:
print("stop")
else:
print("go")

В псевдокоде то же самое можно записать словами:

если расстояние меньше 20
остановить робота
иначе
ехать вперед

Здесь условие distance < 20 решает, какой путь выберет программа. Если расстояние меньше порога, выполняется первая ветка. Если нет, выполняется ветка иначе.

Часть ветвленияЧто означаетПример
Условиевопрос для проверкирасстояние меньше 20?
Ветка "да"команды при истинном условииостановить моторы
Ветка "нет"команды при ложном условииехать вперед
Слияниеместо, где алгоритм продолжаетсяснова читать датчик

Неполное и полное ветвление

Иногда нужно действие только в одном случае:

если кнопка нажата
включить светодиод

Если кнопка не нажата, программа просто идет дальше. Такое ветвление называют неполным.

Чаще для робота лучше явно записывать оба случая:

если кнопка нажата
включить светодиод
иначе
выключить светодиод

Сравнение неполного и полного ветвления особенно наглядно на двух блок-схемах:

Сравнение неполного и полного ветвления

Так алгоритм меньше зависит от старого состояния устройства. Если светодиод уже горел раньше, неполное ветвление может оставить его включенным там, где ученик ожидал выключение.

Несколько условий

У робота может быть больше двух вариантов. Например, датчики линии дают разные ситуации:

Ветвление по датчикам линии

СитуацияДействие
оба датчика видят линиюехать прямо
линия под левым датчикомповернуть влево
линия под правым датчикомповернуть вправо
линия потерянаискать линию

Такой алгоритм можно записать как несколько проверок подряд. В Python для этого есть elif, в псевдокоде можно писать "иначе если".

если оба датчика видят линию
ехать прямо
иначе если левый датчик видит линию
повернуть влево
иначе если правый датчик видит линию
повернуть вправо
иначе
искать линию

При нескольких вариантах ромбы располагают последовательно. Порядок ромбов совпадает с порядком проверок в псевдокоде.

Блок-схема нескольких условий для датчиков линии

Порядок проверок влияет на результат. Если сначала проверить только левый датчик, то ситуация "оба датчика видят линию" может попасть в неправильную ветку.

Ошибки в ветвлениях

Ветвления часто ломаются не из-за синтаксиса, а из-за неточного условия.

ОшибкаЧто происходитКак проверить
Неверный знак сравненияробот останавливается слишком рано или позднопроверить примеры значений
Забыта ветка иначеустройство сохраняет старое состояниеописать оба случая
Перепутан порядок условийвыбирается не та веткапроверить таблицу ситуаций
Условие всегда истинноодна ветка работает постоянновывести значения для отладки
Датчик шумит около порогаробот дергаетсядобавить диапазон или фильтрацию

Ветвление удобно проверять таблицей. В таблице видны все случаи, а не только тот, который пришел в голову первым.

Как проверять ветвление вручную

Перед запуском на роботе полезно выполнить алгоритм "карандашом". Берем несколько значений датчика и смотрим, в какую ветку они попадут.

Например, порог расстояния равен 20.

РасстояниеУсловие расстояние < 20Действие
10даостановиться
19даостановиться
20нетехать
25нетехать

Такая проверка сразу показывает граничный случай. Если робот должен останавливаться и при расстоянии 20, условие должно быть не < 20, а <= 20. Граница условия часто важнее, чем кажется на первом чтении кода.

Еще один прием - временно выводить не только значение датчика, но и выбранную ветку:

расстояние = 18
выбрано: остановиться

Так легче отличить ошибку логики от ошибки подключения мотора.

Что запомнить про ветвление

Ветвление добавляет выбор, но не заменяет точное описание алгоритма.

ВопросЧто проверить
Что программа спрашивает?условие
Какие ответы возможны?да/нет или несколько случаев
Что делать в каждом случае?команды веток
Что будет после выбора?продолжение алгоритма
Все ли случаи описаны?таблица ситуаций

Если робот реагирует неправильно, сначала нужно проверить не моторы, а то, какую ветку реально выбрала программа.

Практика

Задание 1

Запишите ветвление для робота:

если расстояние меньше 15 см
...
иначе
...

Выберите команды для обеих веток.

Задание 2

Составьте таблицу для кнопки и светодиода.

Кнопка нажата?Что должен делать светодиод?
нет
да

Задание 3

У робота два датчика линии. Придумайте ветвление для четырех ситуаций: 00, 01, 10, 11.

Проверьте себя

  • Для чего нужен ромб в блок-схеме?
  • Чем ветка если отличается от ветки иначе?
  • Почему порядок нескольких условий может менять поведение?
  • Что случится, если забыть описать случай "нет"?
  • Как таблица помогает проверить ветвление?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Ветвление - выбор пути в алгоритме по условию.
  • Условие - проверяемое выражение с результатом истина/ложь.
  • Ветка - набор команд, который выполняется при определенном результате условия.
  • Порог - значение, с которым сравнивают измерение.
  • Истина - условие выполнено.
  • Ложь - условие не выполнено.
  • Ромб в блок-схеме - блок проверки условия.

Связанные темы

Источники