"Информатика", Семёнов А.Л., Рудченко Т.А.
Команды-запросы помогают Роботу узнать, свободна ли соседняя клетка, не меняя его положения. Ответ запроса — истина или ложь; его используют как условие, чтобы выбрать дальнейшие команды. Так можно сначала проверить путь и только потом двигаться, а если проход закрыт — выполнить другой вариант действий или остаться на месте. Это основа безопасных алгоритмов с ветвлением.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Команда-запрос Робота — команда, которая не перемещает исполнителя, а проверяет, свободна ли соседняя клетка с указанной стороны. Например, запрос «слева свободно» сообщает об обстановке слева, но Робот остаётся на прежнем месте. Такой запрос нужен, чтобы узнать, можно ли безопасно выбрать движение в эту сторону.
Условие — выражение, которое при проверке принимает одно из двух значений: истина или ложь. Если запрос «справа свободно» обнаружил свободную клетку, условие истинно; если там стена — ложно. Результат помогает алгоритму выбрать подходящие команды для каждой ситуации.
Условный оператор — конструкция алгоритма, которая выбирает дальнейшие команды в зависимости от результата проверки условия. В ней можно указать, что делать при истинном результате, и что делать при ложном. Благодаря этому алгоритм учитывает обстановку на поле, а не действует одинаково при любых обстоятельствах.
Ветвление — выполнение одного из возможных вариантов действий в зависимости от условия. Например, при свободной клетке Робот шагает вправо, а при стене остаётся на месте. Ветвление нужно, когда заранее неизвестно, какой ответ даст проверка.
Поле Робота состоит из клеток, а стены отделяют одни клетки от других и могут перекрывать путь. Робот находится в определённой клетке, поэтому у него есть соседние клетки сверху, снизу, слева и справа. Перед движением важно проверить нужную сторону: иначе алгоритм может предложить шаг туда, где проход закрыт. Проверка позволяет выбрать действие с учётом реального положения исполнителя.
Запросы «сверху свободно», «снизу свободно», «слева свободно» и «справа свободно» относятся каждый к своей стороне. Запрос отвечает, можно ли пройти в этом направлении: если соседняя клетка не закрыта стеной, путь свободен. Сам запрос не выполняет переход и не меняет положение Робота. Такое разделение удобно: сначала алгоритм выясняет обстановку, а потом решает, двигаться ли.
Ответ запроса можно использовать как условие, потому что он сообщает один из двух результатов — истину или ложь. Проверка выполняется относительно текущего положения Робота: после перемещения соседняя клетка и стены вокруг него могут быть другими. Например, если он стоит перед стеной справа, условие «справа свободно» ложно. Алгоритм получает конкретный ответ и на его основе выбирает дальнейшие команды.
Условный оператор направляет выполнение по результату проверки. Если условие истинно, выполняется указанная для этого случая команда или группа команд; если ложно — выполняется другая ветвь либо действия пропускаются. Поэтому ложный результат сам по себе не останавливает всю программу и не означает, что в ней ошибка. Он лишь сообщает алгоритму, какой вариант ситуации возник.
Чтобы Робот выбрал безопасное направление, запрос нужно связать с действием в том же направлении. Например: если справа свободно, сделать шаг вправо; иначе остаться на месте. В коридоре можно повторять проверку «справа свободно» перед каждым шагом и двигаться только при истинном ответе. Когда справа появится стена, условие станет ложным, поэтому новый шаг вправо не выполняется.
| Команда-запрос | Условие истинно, если | Условие ложно, если |
|---|---|---|
| сверху свободно | сверху от Робота нет стены | сверху от Робота есть стена |
| снизу свободно | снизу от Робота нет стены | снизу от Робота есть стена |
| слева свободно | слева от Робота нет стены | слева от Робота есть стена |
| справа свободно | справа от Робота нет стены | справа от Робота есть стена |
Чтобы пользоваться таблицей, сначала выбери запрос по нужному направлению, а затем найди, есть ли там стена. Если стены нет, результат условия будет истинным; если есть — ложным. После этого можно определить, какая ветвь алгоритма должна выполняться.
Ответ: условие ложно, потому что справа от Робота есть стена.
Ответ: если справа свободно — шаг вправо, иначе Робот остаётся на месте.
Ответ: повторять проверку «справа свободно»; при истине делать шаг вправо, при лжи остановиться. Проверка перед каждым шагом не позволяет Роботу попытаться пройти сквозь стену.
Путать запрос с командой действия. Иногда кажется, что команда «справа свободно» сама перемещает Робота вправо, но она только сообщает результат проверки. Ошибка возникает, если забыть добавить отдельную команду движения. Проверь себя: после одного запроса положение Робота должно остаться прежним.
Проверять не ту сторону. Например, перед шагом вправо можно ошибочно проверить, свободно ли сверху. Так бывает, когда направление запроса выбирают невнимательно. Сверь направление проверки с предполагаемым движением: для шага вправо нужен запрос «справа свободно».
Считать ложное условие ошибкой программы. Ложь — обычный ответ, например, когда путь закрыт стеной. Путаница появляется, если ожидать, что любой запрос обязательно даст истину. Проверь, предусмотрено ли для ложного результата другое действие или пропуск команд; тогда оба исхода обработаны.
Ставить движение перед проверкой. Если сначала дать команду шага, Робот может попытаться пройти через стену, а проверка уже не защитит его. Так происходит, когда команды записывают в порядке предполагаемого действия, забывая сначала узнать обстановку. Проверь последовательность: запрос должен стоять перед движением, которое от него зависит.
Для работы с запросами нужно знать, как устроено поле Робота: где находятся клетки, стены и сам исполнитель. Также важно различать команды, которые перемещают Робота, и запросы, которые только проверяют обстановку. Без этого трудно понять, к какой клетке относится результат проверки.
Условие и ветвление связаны с общим представлением об алгоритме как о последовательности команд. Робот выполняет их по порядку, но условный оператор может направить выполнение по разным вариантам. Поэтому при составлении программы нужно продумать, что делать и при истине, и при лжи.
Проверки и ветвления пригодятся в алгоритмах, где действие зависит от обстановки на поле. Их также используют вместе с повторением: например, проверять путь перед каждым шагом по коридору. Так исполнитель может продолжать движение, пока условие истинно, и остановиться при появлении препятствия.
Чем команда-запрос отличается от команды движения?
Команда движения перемещает Робота в соседнюю клетку, если путь свободен. Команда-запрос только проверяет клетку с указанной стороны и оставляет Робота на месте.
Что именно проверяет запрос «справа свободно»?
Он проверяет, есть ли стена в соседней клетке справа от Робота. Если стены нет, результат — истина; если стена есть, результат — ложь.
Может ли условие иметь больше двух результатов?
В этой теме условие принимает одно из двух значений: истина или ложь. По результату программа выбирает, какую ветвь выполнить.
Что происходит, если условие ложно?
Выполняется ветвь, предназначенная для ложного условия. Если такой ветви нет, действия внутри условной команды просто пропускаются.
Зачем проверять свободную клетку перед шагом Робота?
Проверка показывает, есть ли перед Роботом свободный проход в нужную сторону. Благодаря этому алгоритм не отдаёт команду движения через стену и может выбрать другой вариант.
Команды-запросы Робота. Условие