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