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