Вопрос:

3.196. Исполнитель Робот действует на клетчатом поле, между клетками которого могут быть стены. Где-то в поле Робота находятся две горизонтальные стены равной, но неизвестной длины, расположенные одна напротив другой. Робот находится в произвольной клетке над верхней стеной. На рисунке указан один из возможных вариантов расположения Робота и стен (Робот обозначен буквой «Р»). Напишите программу, выполнив которую Робот закрасит все клетки, примыкающие сверху к верхней и нижней стенам. Так, для приведённого выше рисунка должны быть закрашены следующие клетки: Конечное положение Робота значения не имеет.

Ответ:

Решение:

Программа должна заставить робота двигаться и закрашивать клетки. Предполагаем, что робот может закрашивать клетки и двигаться вверх, вниз, влево, вправо.

Логика программы:

  1. Найти верхнюю стену: Робот движется вниз до тех пор, пока не встретит стену (или пока не сможет двигаться вниз).
  2. Закрасить клетки над верхней стеной: После обнаружения верхней стены, робот закрашивает клетку, в которой находится (если она над стеной), и двигается вверх, закрашивая каждую клетку, пока не достигнет края поля или другой стены.
  3. Найти нижнюю стену: Робот спускается к нижней стене.
  4. Закрасить клетки над нижней стеной: Робот движется вниз до верхней границы нижней стены, закрашивает клетку и продолжает движение вверх, закрашивая каждую клетку, пока не достигнет края поля или другой стены.

Программа (псевдокод):

ЕСЛИ есть_стена_внизу ИЛИ край_поля_внизу:  // Обнаружена верхняя граница нижней стены  ПОКА НЕ есть_стена_вверху ИЛИ край_поля_вверху:    ЗАкрасить_клетку()    Вверх()  КОНЕЦ ПОКА  КОНЕЦ ЕСЛИ  ЕСЛИ есть_стена_внизу ИЛИ край_поля_внизу:  // Обнаружена верхняя граница нижней стены  ПОКА НЕ есть_стена_вверху ИЛИ край_поля_вверху:    ЗАкрасить_клетку()    Вверх()  КОНЕЦ ПОКА  КОНЕЦ ЕСЛИ

Примечание: Данный псевдокод предполагает, что робот изначально находится над верхней стеной. Для точной реализации требуется знание конкретных команд робота (например, `ВНИЗ`, `ВВЕРХ`, `ЗАкрасить`). После обнаружения верхней стены, робот должен двигаться вверх, закрашивая каждую клетку, пока не достигнет верхней границы поля или верхней стены. Затем, для нижней стены, робот должен найти верхнюю границу нижней стены, закрасить клетку и двигаться вверх, закрашивая все клетки до верхней границы поля или верхней стены.

Пример последовательности действий для верхних клеток:

  1. Если сверху есть стена, двигаться вниз до обнаружения верхней грани стены.
  2. Пока сверху не стена: закрасить клетку, двигаться вверх.

Пример последовательности действий для нижних клеток:

  1. Двигаться вниз до обнаружения нижней стены.
  2. Если сверху не стена: закрасить клетку, двигаться вверх, пока сверху не будет стена или край поля.

Ключевые команды:

  • ВНИЗ
  • ВВЕРХ
  • ЗАкрасить
  • ЕСЛИ есть_стена_внизу
  • ЕСЛИ есть_стена_сверху
  • ПОКА НЕ есть_стена_вверху
  • ПОКА НЕ есть_стена_внизу

Ответ: Программа для закрашивания клеток, примыкающих сверху к верхней и нижней стенам, должна включать команды движения вверх и вниз, а также команду закрашивания, с использованием условий для обнаружения стен.

Подать жалобу Правообладателю

Похожие