§. ПМ Линейный алгоритм и препятствие
А теперь подумайте, что произойдёт, если Робот приступит к выполнению этой же программы в обстановке, в которой между двумя клетками есть стена. На рисунке стена находится между верхней левой и расположенной под ней клетками поля 3×3. Программа из примера 5:
алг узор
нач
закрасить
вправо
вправо
закрасить
вниз
влево
закрасить
влево
вверх
кон
Решение
Обозначим клетки парой (строка; столбец), считая строки сверху вниз, а столбцы слева направо. Начальная клетка Робота — (; ). Линейный алгоритм выполняет все команды по порядку записи, не проверяя наличие стены перед движением.
Сначала Робот закрашивает (; ). Две команды «вправо» переводят его через (; ) в (; ); эта клетка тоже закрашивается. Команда «вниз» приводит в (; ), затем «влево» — в (; ). Здесь выполняется третье закрашивание. Следующая команда «влево» приводит Робота в (; ).
Остаётся команда «вверх», которая должна вернуть Робота из (; ) в исходную (; ). Но именно между этими клетками на новом рисунке стоит стена. Исполнитель не умеет пропустить или заменить заранее записанную команду: попытка движения через стену вызывает отказ, Робот разрушается и в начальную клетку не возвращается. Значит, рисунок он закрасит, но программа не завершится успешно.
Ответ
Робот закрасит три клетки узора, а на последней команде «вверх» столкнётся со стеной и разрушится.