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