Найти тему
Репетитор IT mentor

Как решать задачу 15.1 из ОГЭ по информатике

Оглавление

В этой заметке мы подробно рассмотрим как решить самую сложную задачу 15-1 из ОГЭ по информатике. Есть несколько подвох, в котором путается большинство учащихся 9-го класса.

А пока попрошу подписаться на мой канал в telegram IT mentor . Краткие заметки и наблюдения по физике, математике, программированию, железу и технике 💡

Задача

15.1 Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может. У Робота есть девять команд. Четыре команды  — это команды-приказы: вверх, вниз, влево, вправо

При выполнении любой из этих команд Робот перемещается на одну клетку соответственно: вверх ↑ вниз ↓, влево ← , вправо →. Если Робот получит команду передвижения сквозь стену, то он разрушится. Также у Робота есть команда закрасить, при которой закрашивается клетка, в которой Робот находится в настоящий момент.

Еще четыре команды  — это команды проверки условий. Эти команды проверяют, свободен ли путь для Робота в каждом из четырех возможных направлений:
сверху свободно , снизу свободно,  слева свободно,  справа свободно

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

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

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

-2

Решение:

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

Пункт 1. Попробовать разбить полный алгоритм на крупные части по циклам. Для нашей задачи таких частей будет две:
- протий по лестнице вверх
- спуститься по лестнице вниз

Пункт 2. Разбираем подъем по лестнице вверх. Это будет первый цикл. Для написания цикла, вы сначала можете поставить для себя задачу: «дойти до намеченной точки и не разбиться». В нашем случае, давайте сначала дойдем до данной точки:

-3

Пункт 3. Цикл — это многократное повторение «упаковки» иструкций, которые называются телом цикла. Таким образом, чтобы написать цикл, нужно подумать над 3 вещами:
◼ Какие инструкции нужно повторять
◼ Где должен находиться робот, чтобы можно было запустить цикл
◼ Чем отличается начальная точка, в которой находится робот ДО цикла, от конечной точки, в которую робот должен прийти.
◼ Какое должно быть условие, чтобы вовремя остановиться, т.е. чтобы цикл не стал бесконечным, а робот нее разрушился об стенку.

Пункт 4. Нужно понять чем отличается начальная точка от конечной. Если они отличаются, то мы сможем запустить цикл и остановить его. В нашем случае все ступеньки одинаковые, но когда робот дойдет до вершины, у него не будет преграды справа. Значит мы можем двигаться, ориентируясь на условие пока справа свободно. Если мы не находимся в нужной точке, то можно подогнать робота в неё парой инструкций ВНЕ цикла.

Пункт 5. Теперь нужно понять элементарный алгоритм цикла — тело цикла. При прохождении лестницы элементарный код должен описывать букву "Г". Для этого нам достаточно 4 инструкции (две на движение и две на покраску):
◼ закрасить
◼ вверх
◼ закрасить
◼ вправо

Пункт 6. После того, как мы поднялись, нам нужно спуститься по лестнице. И вот тут возникает сложность, в ловушку которой попадают ученики. Начальная точка не отличается от конечной точки. Поэтому написание цикла ломается. И вот как это получается. Приведу нерабочий пример с ошибкой, которая получается, если написать цикл спуска по аналогии с циклом подъема:

-4

Если же не менять начальной точки, а обернуть движение «вниз» в условие, то робот не разбивается, но красит лишнюю область, которая нам не нужна.

-5

И вот тут, из-за того, что после первого цикла мы не перешли в нужную точку, можно запутаться в попытках написать второй цикл. Сделать это всё-таки можно. Например так:

-6

Если же мы бы сделала небольшое смещение с помощью команд
• закрасить
• вправо
, то попали бы в точку, относительно которой легко запустить БОЛЕЕ ПРОСТОЙ цикл.

-7

И давайте уже напишем готовый более простой код решения... Следующий рабочий код не будет включать в себя сложные условные конструкции если..то.

Рабочий код

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

-8

Понравилась статья? Поставьте лайк, подпишитесь на канал, напишите комментарий! Вам не сложно, а мне очень приятно :)

Если Вам нужен репетитор по физике, математике или информатике/программированию, Вы можете написать мне или в мою группу Репетитор IT mentor в VK Лучший канал для физиков, математиков и программистов Репетитор IT mentor в telegram

Наука
7 млн интересуются