Часть 2. Задание 15.1 (Робот)

В презентации, приведенной ниже приведен теоретический материал  и разбор задания 15.1 из 

Варианта ОГЭ-2022. Демо. 

Мы при решении задач данного типа используем среду КУМИР.

Готовимся к ОГЭ.Робот

Разберем решение некоторых задач, приведенных в презентации. Дело в том, что первые задачи 1 и 2 (стр. 18, 19) очень простые. Их можно предложить учащимся выполнить самостоятельно. Как правило, они успешно справляются с решением этих задач.

Главный критерий оценки правильности выполнения данного задания (выдержка из демонстрационного варианта ОГЭ-2022.):

Алгоритм работает правильно при всех допустимых значениях, то есть выполняются все условия задачи (2 балла)

При всех допустимых исходных данных верно следующее (1 балл):

1) выполнение алгоритма завершается, и при этом Робот не разбивается;
2) закрашено не более 10 лишних клеток;
3) остались незакрашенными не более 10 клеток из числа тех, которые должны были быть закрашены

При решении, отвечающим всем условиям задачи, не должно быть таких случаев:
1. Цикл с условием n раз не применяется, так как размеры стен и проходов неизвестны.
2. Робот не доходит до границы, обозначающей конец поля. Хотя при этом сигнала разбитого Робота не приходит, но это ошибка, так как размеры полотна не ограничены.
3. Робот не должен проходить одни и те же клетки поля (по возможности!)

Задача 3 (стр. 20 учебного пособия, приведенного выше). На бесконечном поле есть горизонтальная и вертикальная стены. Левый конец горизонтальной стены соединён с нижним концом вертикальной стены. Длины стен неизвестны. В каждой стене есть ровно один проход, точное место прохода и его ширина неизвестны. Робот находится в клетке, расположенной непосредственно над горизонтальной стеной у её правого конца.

На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).

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

Решение

Нижняя стена состоит из двух частей, разделенных проходом. Можно программно это все оформить в виде двух циклов. Но можно реализовать и так:
нц пока не слева стена
  если снизу стена
  то
    закрасить
все
влево
кц
Как работает цикл в этом случае?
Ну, во-первых, условием выполнения цикла ставим - "не слева стена" (по другому говоря, пока слева свободно - перемещайся влево). Кстати, среда КУМИР позволяет использовать вместо фразы "не слева стена" фразу "слева свободно".
Во-вторых, добавление в тело цикла условного оператора (если) позволяет ему (Роботу) перемещаясь влево (команда в теле цикла) еще и выполнять команду закрасить. То есть, совмещать сразу выполнение двух команд: закрасить и влево. Такая вставка (совмещение двух структур по вложенному принципу) позволяет исключить один цикл при решении задачи. То есть, вместо пяти циклов, можно использовать всего четыре. (Это не увеличивает стоимость оценки за решение задачи, но тешит собственное самолюбие)
После выполнения данного фрагмента программы Робот окажется в точке нижней части вертикальной стены.
Для выполнения задания окрашивания вертикальной стены можно применить обычный способ: при помощи трех циклов выполнить все условия задания.
Итак, полностью программа выглядит так:

использовать Робот
алг
нач
  нц пока слева свободно
      если снизу стена
        то
            закрасить
      все
  влево
кц
нц пока слева стена |начало вертикальной стены, первая ее часть
закрасить
        вверх
кц
нц пока слева свободно | проходим проход
  вверх
кц
нц пока слева стена | последняя часть вертикальной стены
  закрасить
  вверх
кц
кон

Задача 13.15 (стр. 25 пособия). На бесконечном поле имеется лестница. Сначала лестница спускается вниз слева направо, затем спускается вниз справа налево. Высота каждой ступени – одна клетка, ширина – две клетки. Робот находится слева от верхней ступени лестницы.

Количество ступеней, ведущих налево, и количество ступеней, ведущих направо, неизвестно.

На рисунке указан один из возможных способов расположения лестницы и Робота (Робот обозначен буквой «Р»).

Напишите для Робота алгоритм, закрашивающий все клетки, расположенные непосредственно над ступенями лестницы, спускающейся справа налево. Требуется закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок). Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться.

Проанализируйте решение задачи.
использовать Робот
алг
нач
нц пока справа свободно или сверху свободно
  если справа стена
то
вниз
иначе
вправо
  все
  если справа свободно
то
вправо
иначе
вниз
все
кц

нц пока снизу стена
закрасить
влево
если снизу свободно
то
вниз
все
кц
кон

Решение может быть другим. Здесь приведен, с моей точки зрения, оптимальный вариант.

Задачи для самостоятельного решения

Задача 1-с. Выполните задание:

На бесконечном поле имеется стена, состоящая из 5 последовательных отрезков, расположенных змейкой: вправо, вниз, влево, вниз, вправо, все отрезки неизвестной длины. Робот находится в самой левой клетке непосредственно под верхней горизонтальной стеной. На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).

Напишите для Робота алгоритм, закрашивающий все клетки, расположенные ниже первого и левее второго отрезков стены и левее четвёртого и ниже пятого отрезков стены. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок). Клетка X также должна быть закрашена.

При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для любого допустимого расположения стен и любого расположения и размера проходов внутри стен. 

Ответ

использовать Робот
алг
нач
нц пока справа свободно или снизу свободно
    если сверху стена
      то
закрасить
вправо
    все
  если справа стена
то
закрасить
вниз
  все
кц
закрасить
нц пока снизу стена
влево
кц
вниз
нц пока справа стена
закрасить
вниз
кц
закрасить
вправо
нц пока сверху стена
закрасить
вправо
кц
кон

Задача 2-с. Выполните задание:

  На бесконечном поле имеется лестница. Сначала лестница спускается вниз слева направо, потом поднимается вверх также слева направо. После подъема лестница переходит в вертикальную стену. Высота каждой ступени — 1 клетка, ширина — 1 клетка. Количество ступенек, ведущих вверх, и количество ступенек, ведущих вниз, неизвестно. Между спуском и подъемом ширина площадки — 1 клетка. Робот находится в клетке, расположенной в начале спуска. На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р») .

  Напишите для Робота алгоритм, закрашивающий все клетки, расположенные непосредственно над лестницей, как показано на рисунке. Требуется закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).
    Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. 

Ответ

использовать Робот

алг
нач
вправо
вниз
нц пока справа свободно
  если снизу стена
то
закрасить
вправо
  все
  если снизу свободно
то
закрасить
вниз
  все
кц
закрасить
вверх
вправо
нц пока не справа свободно
  если снизу стена и не справа свободно
то
закрасить
вверх
иначе
стоп
все
  если справа свободно
то
закрасить
вправо
все
кц
кон

Задача 3-с. Выполните задание:

  На бесконечном поле имеется лестница. Сначала лестница поднимается вверх слева направо, потом опускается вниз также слева направо. Правее спуска лестница переходит в горизонтальную стену. Высота каждой ступени — 1 клетка, ширина — 1 клетка. Количество ступенек, ведущих вверх, и количество ступенек, ведущих вниз, неизвестно. Между спуском и подъемом ширина площадки — 1 клетка. Робот находится в клетке, расположенной в начале подъема. На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р») .

  Напишите для Робота алгоритм, закрашивающий все клетки, расположенные непосредственно над лестницей. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).
  Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. 

Ответ

использовать Робот
алг
нач
нц пока справа стена
закрасить
вверх
закрасить
  если справа свободно
то
вправо
  все
кц
закрасить
вправо
закрасить
вниз
нц пока слева стена и снизу стена
  если слева стена
то
закрасить
вправо
  все
  если снизу свободно
то
закрасить
вниз
  все
кц
кон

Задача 4-с. Выполните задание:

   На бесконечном поле имеется горизонтальная стена. Длина стены неизвестна. Робот находится сверху от стены в левом её конце. На рисунке приведено расположение Робота относительно стены (Робот обозначен буквой «Р»). 

   Напишите для Робота алгоритм, закрашивающий все клетки, расположенные выше стены на расстоянии одной пустой клетки от стены, независимо от длины стены. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).

Ответ

использовать Робот

алг
нач
нц пока снизу стена
  вверх
  закрасить
  вправо
  закрасить
если снизу свободно
  то
вниз
вправо
все
кц
кон

Задача 5-с. Выполните задание:

   Робот находится в левом верхнем углу огороженного пространства, имеющего форму прямоугольника. Размеры прямоугольника неизвестны. Где-то посередине прямоугольника есть вертикальная стена, разделяющая прямоугольник на две части. В этой стене есть проход, при этом проход не является самой верхней или самой нижней клеткой стены. Точное расположение прохода также неизвестно. Одно из возможных расположений стены и прохода в ней приведено на рисунке (робот обозначен буквой «Р»):

   Напишите для Робота алгоритм, перемещающий робота в правый нижний угол прямоугольника (см. рисунок):

Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться.

Ответ

использовать Робот
алг
нач
нц пока снизу свободно или справа свободно
если справа свободно
  то
вправо
все
если справа стена
  то
вниз
  иначе
вправо
все
кц
кон