Новый РОБОТ – ПОКА и ЕСЛИ О.Б. Богомолова, Д.Ю. Усенков Задача. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости: ввер вни влев вправ з о о х При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ: Цикл сверху свобод но снизу свобод но слева свобод но ПОКА < условие > справа свобод но последовательность команд КОНЕЦ ПОКА выполняется, пока условие истинно. В конструкции ЕСЛИ < условие > ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ выполняется команда1 (если условие истинно) или команда2 (если условие ложно) В конструкциях ПОКА и ЕСЛИ условие может быть составным – с использованием логических операций И, ИЛИ, НЕ. Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся. Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка F6)? НАЧАЛО ПОКА < справа свободно ИЛИ снизу свободно > ЕСЛИ < справа свободно > вправо КОНЕЦ ЕСЛИ ЕСЛИ < снизу свободно > 1 вниз 2 КОНЕЦ ЕСЛИ КОНЕЦ ПОКА 3 КОНЕЦ 4 5 6 A B C D E F Решение 1. Цикл ПОКА < справа свободно ИЛИ снизу свободно > выполняется до тех пор, пока в текущей клетке (в которой начинается очередное выполнение тела цикла) не окажется стенка одновременно снизу и справа: Конечная клетка Решение 2. Тело цикла ПОКА состоит из двух операторов ЕСЛИ, из которых первый смещает РОБОТа на одну клетку вправо (если справа нет стенки), а второй – на одну клетку вниз (если снизу нет стенки). Только после выполнения (или пропуска) этих двух операторов ЕСЛИ снова проверяется условие цикла ПОКА. Будем называть клетку, в которой начинается выполнение очередного прохода цикла, ключевой клеткой (в том числе клетку, откуда начинается движение РОБОТа). Тогда каждый проход цикла даёт движение «зигзагом» вправо и вниз (либо при наличии стенки с одной из сторон – только вправо или только вниз) до следующей ключевой клетки: Ключевая клетка Решение 3. Анализируем клетки лабиринта. 3.1. Клетка A1: не является конечной (не имеет стенок справа и снизу), поэтому РОБОТ из нее переместится сначала в клетку B1, а затем – в клетку B2: 1 2 3 4 5 6 A B C D E F Решение Клетка B2 тоже не является конечной, поэтому РОБОТ из нее переместится сначала в клетку C2, а затем – в клетку C3: 1 2 3 4 5 6 A B C D E F Решение Клетка C3 – не конечная, поэтому РОБОТ переместится в клетку D3, а затем в клетку D4: 1 2 3 4 5 6 A B C D E F Решение Клетка D4 – не конечная, поэтому РОБОТ переместится в клетку E4, а затем в клетку E5: 1 2 3 4 5 6 A B C D E F Решение Клетка E5 – не конечная, поэтому РОБОТ переместится в клетку F5, а затем в клетку F6: 1 2 3 4 5 6 A B C D E F Решение Итак, РОБОТ благополучно пришел в требуемую клетку F6. Очевидно, не менее благополучно он придет в клетку F6 из любой пройденной на этом пути ключевой клетки. Помечаем все эти ключевые клетки зеленым цветом: 1 2 3 4 5 6 A B C D E F Решение 3.2. Клетка A2: не является конечной, поэтому РОБОТ из нее переместится сначала в клетку B2, а затем – в клетку B3: 1 2 3 4 5 6 A B C D E F Решение Клетка B3 не конечная, поэтому РОБОТ из нее переместится сначала в клетку C3, а затем – в клетку C4: 1 2 3 4 5 6 A B C D E F Решение Аналогично далее РОБОТ переместится сначала в клетку D4, а затем в клетку D5. После этого он проследует в клетку E5, а потом в клетку E6: 1 2 3 4 5 6 A B C D E F Решение А теперь – внимание! – на очередном проходе цикла первый оператор ЕСЛИ будет выполнен (стенки справа нет) и РОБОТ сместится вправо в клетку F6, а второй оператор ЕСЛИ будет пропущен (снизу есть стенка): 1 2 3 4 5 6 A B C D E F Решение РОБОТ снова благополучно пришел в клетку F6 – помечаем зеленым цветом все пройденные ключевые клетки: 1 2 3 4 5 6 A B C D E F Решение 3.3. Клетка A3: не является конечной, поэтому РОБОТ из нее переместится сначала в клетку B3, а затем – в клетку B4: 1 2 3 4 5 6 A B C D E F Решение Клетка B4 – не конечная (стенка есть только справа), поэтому цикл ПОКА выполняется. Но первый оператор ЕСЛИ будет пропущен (справа есть стенка). Второй оператор ЕСЛИ будет выполнен (снизу стенки нет), и РОБОТ переместится в клетку B5: 1 2 3 4 5 6 A B C D E F Решение Клетка B5 тоже не конечная. Аналогично предыдущему случаю, первый оператор ЕСЛИ будет пропущен (справа есть стенка), а второй оператор ЕСЛИ будет выполнен (снизу стенки нет), и РОБОТ переместится в клетку B6: 1 2 3 4 5 6 A B C D E F Решение Однако клетка B6 – неправильная («ловушка»). Поэтому все ключевые клетки, пройденные РОБОТом на этом пути, надо пометить красным цветом: 1 2 3 4 5 6 A B C D E F Решение Очевидно, то же самое (попадание РОБОТа в «ловушку» B6) будет происходить, если РОБОТ начнет движение из клеток A4, A5 и A6 (в последнем случае РОБОТ первым оператором ЕСЛИ сместится в B6, а второй ЕСЛИ будет пропущен). Следовательно, эти ключевые клетки помечаются красным цветом: 1 2 3 4 5 6 A B C D E F Решение 3.4. Клетка B1: очевидно, РОБОТ пойдет по клеткам: C1–C2 и D2–D3. Клетка D3 – не конечная (нет стенки снизу). Поскольку справа есть стенка, первый оператор ЕСЛИ пропускается, а второй выполняется. РОБОТ перейдет в клетку D4 и далее «по накатанному пути». 1 2 3 4 5 6 A B C D E F Решение Вывод: ключевые клетки B1, C2 и D3 можно отметить зеленым цветом: 1 2 3 4 5 6 A B C D E F Решение Так же РОБОТ поведет себя, начиная движение из клеток C1, D1 и D2 («натыкаясь» по пути на стенку справа, он будет пропускать первый оператор ЕСЛИ и смещаться вниз, пока стенка не закончится, а дальше пойдет «своим путем» в клетку F6). Все эти клетки можно пометить зеленым цветом: 1 2 3 4 5 6 A B C D E F Решение Не менее очевидно поведение РОБОТа, который начинает путь из клеток C5, C6 и D6, только здесь его ограничивает стенка снизу (пропуск второго оператора ЕСЛИ), и РОБОТ будет продвигаться вдоль этой нижней стенки по горизонтали до целевой клетки F6: 1 2 3 4 5 6 A B C D E F Решение 3.5. Клетка E1, а также все остальные еще не рассмотренные клетки: начиная из них движение, РОБОТ будет смещаться вправо и вниз до правой стенки, а затем пойдет вниз вдоль этой стенки (за счет пропусков первого ЕСЛИ) до целевой клетки F6. Значит, все эти клетки можно пометить зеленым цветом: 1 2 3 4 5 6 A B C D E F Решение Остается подсчитать количество клеток, помеченных зеленым цветом. Их 29 штук. 1 Зеленых клеточек – 29 2 3 4 5 6 A Ответ: 29. B C D E F