Задача 6.4.1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:
При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно (по отношению к наблюдателю): вверх ↑, вниз ↓, влево ←, вправо →.
Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ (также по отношению к наблюдателю):
сверху свободно
|
снизу свободно
|
слева свободно
|
справа свободно
|
Цикл
ПОКА < условие >
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ < условие >
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.
Сколько клеток лабиринта соответствуют такому требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка F6)?
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ПОКА < снизу свободно >
вниз
КОНЕЦ ПОКА
ПОКА < справа свободно >
вправо
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
Начнем проверять ячейки с наиболее удаленной от места назначения клетки, потому что так быстрее и удобнее будет изучить поведение робота, выполняющего алгоритм (клетка старта отмечена кружочком):
1
|
о
|
|
|
|
|
|
2
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Проверяем условие цикла ПОКА<справа свободно ИЛИ снизу свободно >. Оба условия верны, поэтому заходим внутрь этого цикла и проверяем условие внутреннего цикла ПОКА < снизу свободно >. Его условие также истинно, поэтому выполняем тело внутреннего цикла вниз. Поскольку речь идет о цикле, то это действие повторяем много раз. То есть робот идет вниз до тех пор, пока не встретит преграду снизу:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
После того, как робот дойдет до низа, условие цикла ПОКА < снизу свободно > перестанет выполняться.
Начнет проверяться условие второго внутреннего цикла ПОКА < справа свободно >
Это условие истинно, поскольку речь идет о цикле, робот будет шагать вправо до тех пор, пока не встретится стена:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
То есть клетка старта нам подходит:
1
|
V
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Далее проверяем клетки по нашей траектории движения вниз и убеждаемся, что они подходят (заметим, что так бывает не всегда):
1
|
V
|
|
|
|
|
|
2
|
V
|
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Проверим нижние клетки по траектории движения и убедимся, что они тоже подходят (для них первый внутренний цикл ПОКА < снизу свободно > не работает, зато работает второй внутренний цикл ПОКА < справа свободно >):
1
|
V
|
|
|
|
|
|
2
|
V
|
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Наконец, проверяем точку финиша и убеждаемся, что робот, находящийся в ней, никуда не уйдет и не разобьется, так как условия внешнего цикла ПОКА<справа свободно ИЛИ снизу свободно > ложны:
1
|
V
|
|
|
|
|
|
2
|
V
|
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим следующую дальнюю клетку лабиринта:
1
|
V
|
о
|
|
|
|
|
2
|
V
|
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Условие внешнего цикла выполняются, начинается первый внутренний цикл ПОКА < снизу свободно >:
1
|
V
|
о
|
|
|
|
|
2
|
V
|
о
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Когда перестает выполняться первый внутренний цикл, начинает работать второй цикла ПОКА < справа свободно >.
1
|
V
|
о
|
|
|
|
|
2
|
V
|
о
|
о
|
о
|
о
|
о
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Робот уходит в тупик, поэтому наша точка старта не годится:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
о
|
о
|
о
|
о
|
о
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Не годится и следующая точка по изучаемой траектории (робот ведет себя так же, как и в уже проверенных клетках нижнего ряда):
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
о
|
о
|
о
|
о
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А вот следующая клетка изучаемой траектории С2 породит новую траекторию, так как робот сперва стремится пойти вниз за счет первого внутреннего цикла:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
о
|
о
|
о
|
о
|
3
|
V
|
|
о
|
|
|
|
4
|
V
|
|
о
|
|
|
|
5
|
V
|
|
о
|
о
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Проверим и убедимся, что все эти клетки новой траектории ведут в тупик:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
о
|
о
|
о
|
3
|
V
|
|
X
|
|
|
|
4
|
V
|
|
X
|
|
|
|
5
|
V
|
|
X
|
X
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Мы изучили достаточно траекторий, чтобы вкратце сформулировать движение робота на естественном, а не на алгоритмическом языке: «Робот стремится идти до предела вниз, затем до предела вправо, затем до предела вниз, затем до предела вправо и т.д.». С такой формулировкой проверять становится проще.
Возвращаемся к старой траектории и убеждаемся, что следующая клетка D2 не годится:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
X
|
о
|
о
|
3
|
V
|
|
X
|
|
|
|
4
|
V
|
|
X
|
|
|
|
5
|
V
|
|
X
|
X
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А клетка E2 подойдет:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
X
|
о
|
о
|
3
|
V
|
|
X
|
|
о
|
|
4
|
V
|
|
X
|
|
о
|
|
5
|
V
|
|
X
|
X
|
о
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Подойдут и клетки по её траектории:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
X
|
V
|
о
|
3
|
V
|
|
X
|
|
V
|
|
4
|
V
|
|
X
|
|
V
|
|
5
|
V
|
|
X
|
X
|
V
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Клетка F2 не подойдет:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
X
|
V
|
X
|
3
|
V
|
|
X
|
|
V
|
|
4
|
V
|
|
X
|
|
V
|
|
5
|
V
|
|
X
|
X
|
V
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим неизученные клетки верхнего ряда. Заметим, что если под ними забракованные клетки, то верхние клетки не подойдут, а если в клетке снизу стоит галочка, то подойдут:
1
|
V
|
X
|
X
|
X
|
V
|
X
|
2
|
V
|
X
|
X
|
X
|
V
|
X
|
3
|
V
|
|
X
|
|
V
|
|
4
|
V
|
|
X
|
|
V
|
|
5
|
V
|
|
X
|
X
|
V
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Левый не изученный и центральный не изученный столбцы не подходят:
1
|
V
|
X
|
X
|
X
|
V
|
X
|
2
|
V
|
X
|
X
|
X
|
V
|
X
|
3
|
V
|
X
|
X
|
X
|
V
|
|
4
|
V
|
X
|
X
|
X
|
V
|
|
5
|
V
|
X
|
X
|
X
|
V
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Правый не изученный столбец подойдет:
1
|
V
|
X
|
X
|
X
|
V
|
X
|
2
|
V
|
X
|
X
|
X
|
V
|
X
|
3
|
V
|
X
|
X
|
X
|
V
|
V
|
4
|
V
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Остается пересчитать галочки и написать ответ.
Ответ: 19
После решения этой задачи у вас может появиться иллюзия, что вы всё поняли. Иногда это бывает не так. Ученики путают циклы и условия. Поэтому решим еще три задачи на этот же самый лабиринт, заменив некоторые операторы цикла «пока» на операторы условия «если»:
Задача 6.4.2. Пояснение и лабиринт такие же, как и в предыдущей задаче:
Алгоритм:
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ПОКА < снизу свободно >
вниз
КОНЕЦ ПОКА
ЕСЛИ < справа свободно >
вправо
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Сравним алгоритмы первой и второй задачи, жирным выделив различия:
Текущая задача
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ПОКА < снизу свободно >
вниз
КОНЕЦ ПОКА
ЕСЛИ < справа свободно >
вправо
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
|
Старая задача
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ПОКА < снизу свободно >
вниз
КОНЕЦ ПОКА
ПОКА < справа свободно >
вправо
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
|
Начнем решать также, как и в предыдущей задаче:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Поскольку вместо второго внутреннего цикла у нас условие ЕСЛИ < справа свободно >, то речь идет об однократном движении вправо:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
о
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Далее программа начнет проверять условие внешнего цикла ПОКА<справа свободно ИЛИ снизу свободно >. Оно истинно. Программа проверит условие внутреннего цикла ПОКА < снизу свободно >, оно ложно. Программа проверит условие ЕСЛИ < справа свободно >, оно истинно и программа шагнет вправо. И т.д. Пока траектория движения совпадает с траекторией старой задачи:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Убеждаемся, что все клетки траектории подойдут:
1
|
V
|
|
|
|
|
|
2
|
V
|
|
|
|
|
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А траектория из клетки B1 не совпадает с траекторией старой задачи:
Текущая задача
1
|
V
|
о
|
|
|
|
|
2
|
V
|
о
|
о
|
|
|
|
3
|
V
|
|
о
|
|
|
|
4
|
V
|
|
о
|
|
|
|
5
|
V
|
|
о
|
о
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Старая задача:
1
|
V
|
о
|
|
|
|
|
2
|
V
|
о
|
о
|
о
|
о
|
о
|
3
|
V
|
|
|
|
|
|
4
|
V
|
|
|
|
|
|
5
|
V
|
|
|
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Мы можем сформулировать описание траекторий:
Текущая задача
Робот стремится идти до предела вниз, затем один шаг вправо, затем до предела вниз, затем один вправо и т.д.».
|
Старая задача
Робот стремится идти до предела вниз, затем до предела вправо, затем до предела вниз, затем до предела вправо и т.д.».
|
Убеждаемся, что клетки по рассматриваемой траектории не подходят:
1
|
V
|
X
|
|
|
|
|
2
|
V
|
X
|
X
|
|
|
|
3
|
V
|
|
X
|
|
|
|
4
|
V
|
|
X
|
|
|
|
5
|
V
|
|
X
|
X
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Не подойдут и следующие клетки:
1
|
V
|
X
|
X
|
|
|
|
2
|
V
|
X
|
X
|
|
|
|
3
|
V
|
X
|
X
|
X
|
|
|
4
|
V
|
X
|
X
|
X
|
|
|
5
|
V
|
X
|
X
|
X
|
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из D1:
1
|
V
|
X
|
X
|
о
|
|
|
2
|
V
|
X
|
X
|
о
|
о
|
|
3
|
V
|
X
|
X
|
X
|
о
|
|
4
|
V
|
X
|
X
|
X
|
о
|
|
5
|
V
|
X
|
X
|
X
|
о
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Они подойдут:
1
|
V
|
X
|
X
|
V
|
|
|
2
|
V
|
X
|
X
|
V
|
V
|
|
3
|
V
|
X
|
X
|
X
|
V
|
|
4
|
V
|
X
|
X
|
X
|
V
|
|
5
|
V
|
X
|
X
|
X
|
V
|
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Также подойдут клетки:
1
|
V
|
X
|
X
|
V
|
V
|
|
2
|
V
|
X
|
X
|
V
|
V
|
|
3
|
V
|
X
|
X
|
X
|
V
|
V
|
4
|
V
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Оставшиеся клетки не подходят:
1
|
V
|
X
|
X
|
V
|
V
|
X
|
2
|
V
|
X
|
X
|
V
|
V
|
X
|
3
|
V
|
X
|
X
|
X
|
V
|
V
|
4
|
V
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Ответ: 21.
Изменим теперь первый внутренний цикл, заменив ПОКА на ЕСЛИ:
Задача 6.4.3. Пояснение и лабиринт такие же, как и в задаче 6.4.1:
Алгоритм:
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ЕСЛИ < снизу свободно >
вниз
КОНЕЦ ЕСЛИ
ПОКА < справа свободно >
вправо
КОНЕЦ ПОКА
КОНЕЦ ПОКА
КОНЕЦ
Описание траектории: робот пытается сделать один шаг вниз, затем идти вправо до предела, затем один шаг вниз, затем вправо до предела, и т.д.
Траектория робота из А1 сильно отличается от траектории предыдущих задач:
Текущая задача:
1
|
о
|
|
|
|
|
|
2
|
о
|
о
|
о
|
о
|
о
|
о
|
3
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Предыдущие две задачи:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
|
|
|
|
|
5
|
о
|
|
|
|
|
|
6
|
о
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Таким образом, А1 не годится:
1
|
X
|
|
|
|
|
|
2
|
о
|
о
|
о
|
о
|
о
|
о
|
3
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Проверяем А2:
1
|
X
|
|
|
|
|
|
2
|
о
|
о
|
о
|
о
|
о
|
о
|
3
|
о
|
о
|
о
|
о
|
о
|
о
|
4
|
|
|
|
|
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А2 подходит:
1
|
X
|
|
|
|
|
|
2
|
V
|
о
|
о
|
о
|
о
|
о
|
3
|
о
|
о
|
о
|
о
|
о
|
о
|
4
|
|
|
|
|
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Аналогично А2 подойдут С2 и Е2
1
|
X
|
|
|
|
|
|
2
|
V
|
о
|
V
|
о
|
V
|
о
|
3
|
о
|
о
|
о
|
о
|
о
|
о
|
4
|
|
|
|
|
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Аналогично B2, D2 и F2 не подходят:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
о
|
о
|
о
|
о
|
о
|
о
|
4
|
|
|
|
|
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из А3:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
о
|
о
|
о
|
о
|
о
|
о
|
4
|
о
|
о
|
о
|
о
|
о
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А3 подходит, и аналогично годится весь 3 ряд:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
о
|
о
|
о
|
о
|
о
|
о
|
5
|
|
|
|
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из А4:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
о
|
о
|
о
|
о
|
о
|
о
|
5
|
о
|
о
|
о
|
о
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А4 не подходит, как и B4, C4, D4:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
о
|
о
|
5
|
о
|
о
|
о
|
о
|
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из А5:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
о
|
о
|
5
|
о
|
о
|
о
|
о
|
|
о
|
6
|
о
|
о
|
о
|
о
|
о
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А5 подойдет, как и все клетки её траектории:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
о
|
о
|
5
|
V
|
о
|
о
|
о
|
|
о
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Клетки B5, C5, D5 не подходят, а Е4, Е5, F4, F5 подойдут:
1
|
X
|
|
|
|
|
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Наконец, оставшиеся клетки верхнего ряда не подходят:
1
|
X
|
X
|
X
|
X
|
X
|
X
|
2
|
V
|
X
|
V
|
X
|
V
|
X
|
3
|
V
|
V
|
V
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Ответ: 20.
Заменим все внутренние циклы ПОКА на ЕСЛИ:
Задача 6.4.4. Пояснение и лабиринт такие же, как и в задаче 6.4.1:
Алгоритм:
НАЧАЛО
ПОКА<справа свободно ИЛИ снизу свободно >
ЕСЛИ < снизу свободно >
вниз
КОНЕЦ ЕСЛИ
ЕСЛИ < справа свободно >
вправо
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Робот ходит лесенкой: шаг вниз, шаг вправо, шаг вниз, шаг вправо (если нет препятствий), и т.д.
Траектория из клетки А1:
1
|
о
|
|
|
|
|
|
2
|
о
|
о
|
о
|
|
|
|
3
|
|
|
о
|
о
|
|
|
4
|
|
|
|
о
|
о
|
|
5
|
|
|
|
|
о
|
о
|
6
|
|
|
|
|
|
о
|
|
A
|
B
|
C
|
D
|
E
|
F
|
А1 подходит, как и прочие верхние элементы ступеньки С2, D3, Е4, F5 и F6:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
о
|
V
|
|
|
4
|
|
|
|
о
|
V
|
|
5
|
|
|
|
|
о
|
V
|
6
|
|
|
|
|
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из Е5:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
о
|
V
|
|
|
4
|
|
|
|
о
|
V
|
|
5
|
|
|
|
|
о
|
V
|
6
|
|
|
|
|
о
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Эти клетки подходят:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
о
|
V
|
|
|
4
|
|
|
|
о
|
V
|
|
5
|
|
|
|
|
V
|
V
|
6
|
|
|
|
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Подойдут также следующие клетки:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
о
|
V
|
V
|
V
|
4
|
|
|
|
о
|
V
|
V
|
5
|
|
|
|
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из С3:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
о
|
V
|
V
|
V
|
4
|
|
|
о
|
о
|
V
|
V
|
5
|
|
|
|
о
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Эти клетки не годятся:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
|
|
X
|
V
|
V
|
V
|
4
|
|
|
X
|
X
|
V
|
V
|
5
|
|
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Рассмотрим траекторию из А2:
1
|
V
|
|
|
|
|
|
2
|
о
|
V
|
V
|
|
|
|
3
|
о
|
о
|
X
|
V
|
V
|
V
|
4
|
|
о
|
X
|
X
|
V
|
V
|
5
|
|
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Верхние клетки траектории не годятся, нижние порождают новую траекторию:
1
|
V
|
|
|
|
|
|
2
|
X
|
V
|
V
|
|
|
|
3
|
о
|
X
|
X
|
V
|
V
|
V
|
4
|
о
|
о
|
X
|
X
|
V
|
V
|
5
|
|
о
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Эти клетки не годятся, но А5 подходит:
1
|
V
|
|
|
|
|
|
2
|
X
|
V
|
V
|
|
|
|
3
|
X
|
X
|
X
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Продолжая «строить лесенки», получаем следующую картину:
1
|
V
|
V
|
V
|
V
|
X
|
X
|
2
|
X
|
V
|
V
|
V
|
V
|
X
|
3
|
X
|
X
|
X
|
V
|
V
|
V
|
4
|
X
|
X
|
X
|
X
|
V
|
V
|
5
|
V
|
X
|
X
|
X
|
V
|
V
|
6
|
V
|
V
|
V
|
V
|
V
|
V
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Ответ: 22.
Задача 6.4.5. Пояснение такое же, как и в задаче 6.4.1.
Схема лабиринта:
Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет (не врежется в стену) и остановится в закрашенной клетке (клетка F6)?
НАЧАЛО
ПОКА <снизу свободно ИЛИ справа свободно>
ПОКА <снизу свободно>
вниз
КОНЕЦ ПОКА
вправо
КОНЕЦ ПОКА
КОНЕЦ
Внешний цикл «Пока» содержит два условия, соединенные «или». В этом цикле переход «вправо» не имеет условий. Робот, дойдя до низа во вложенном цикле, далее сделает шаг вправо, даже если справа стена. То есть алгоритм потенциально содержит возможность разрушения робота. Еще один подвох задачи заключается в том, что робот, дойдя до нужной клетки, может и не остановиться (ученики часто забывают проверить, остановится ли робот в конечной клетке).
По клетке А1 изучим траекторию робота:
1
|
о
|
|
|
|
|
|
2
|
о
|
|
|
|
|
|
3
|
о
|
|
|
|
|
|
4
|
о
|
о
|
|
|
|
|
5
|
|
о
|
|
|
|
|
6
|
|
о
|
о
|
|
|
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Начав движение из клетки В1, робот, в отличие от старта из А1, не остановится, а разобьется:
1
|
X
|
o
|
|
|
|
|
2
|
X
|
o
|
o
|
|
|
|
3
|
X
|
|
o
|
|
|
|
4
|
X
|
X
|
o
|
|
|
|
5
|
|
X
|
|
|
|
|
6
|
|
X
|
X
|
|
|
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Остановки произойдут при старте из клеток А5 и B3:
1
|
X
|
X
|
|
|
|
|
2
|
X
|
X
|
X
|
|
|
|
3
|
X
|
X
|
X
|
|
|
|
4
|
X
|
X
|
X
|
|
|
|
5
|
X
|
X
|
|
|
|
|
6
|
X
|
X
|
X
|
|
|
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Робот разобьется при старте из С1, В1 и F1:
1
|
X
|
X
|
X
|
X
|
|
X
|
2
|
X
|
X
|
X
|
X
|
|
X
|
3
|
X
|
X
|
X
|
|
|
|
4
|
X
|
X
|
X
|
|
|
|
5
|
X
|
X
|
|
|
|
|
6
|
X
|
X
|
X
|
|
|
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Из Е1 робот дойдет и остановится в F6:
1
|
X
|
X
|
X
|
X
|
V
|
X
|
2
|
X
|
X
|
X
|
X
|
V
|
X
|
3
|
X
|
X
|
X
|
|
V
|
|
4
|
X
|
X
|
X
|
|
V
|
|
5
|
X
|
X
|
|
|
V
|
|
6
|
X
|
X
|
X
|
|
V
|
V
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Аналогично нам подойдут клетки старта D3 и С5:
1
|
X
|
X
|
X
|
X
|
V
|
X
|
2
|
X
|
X
|
X
|
X
|
V
|
X
|
3
|
X
|
X
|
X
|
V
|
V
|
|
4
|
X
|
X
|
X
|
V
|
V
|
|
5
|
X
|
X
|
V
|
V
|
V
|
|
6
|
X
|
X
|
X
|
V
|
V
|
V
|
|
А
|
B
|
C
|
D
|
E
|
F
|
А вот из клеток F3, F4, F5 робот хоть и дойдет до F6, но при этом не остановится, а сделает шаг вправо и разобьется. Включать эти клетки в ответ – типичная ошибка:
1
|
X
|
X
|
X
|
X
|
V
|
X
|
2
|
X
|
X
|
X
|
X
|
V
|
X
|
3
|
X
|
X
|
X
|
V
|
V
|
X
|
4
|
X
|
X
|
X
|
V
|
V
|
X
|
5
|
X
|
X
|
V
|
V
|
V
|
X
|
6
|
X
|
X
|
X
|
V
|
V
|
V
|
|
А
|
B
|
C
|
D
|
E
|
F
|
Ответ: 12.
Еще одна задача связана с хождением робота по кругу:
Задача 6.4.6. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:
При выполнении этих команд РОБОТ перемещается на одну клетку соответственно: вверх, вниз, влево, вправо.
Четыре команды проверяют истинность условия отсутствия стены у той клетки, где находится РОБОТ:
сверху свободно
|
снизу свободно
|
слева свободно
|
справа свободно
|
Цикл
ПОКА < условие> команда
выполняется, пока условие истинно, иначе происходит переход на следующую строку.
Сколько клеток лабиринта соответствуют требованию, что, выполнив предложенную программу, РОБОТ остановится в той же клетке, с которой он начал движение?
НАЧАЛО
ПОКА < снизу свободно > вниз
ПОКА < слева свободно > влево
ПОКА < сверху свободно > вверх
ПОКА < справа свободно > вправо
КОНЕЦ
По предложенному лабиринту робот ходит по кругу: до предела вниз, до предела влево, до предела вверх, до предела вправо. Поищем такие клетки, начав в которых робот вернется в исходную клетку и остановится:
Первая такая клетка – D3:
1
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
3
|
о
|
о
|
о
|
о
|
|
|
4
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Заметим, что А1 подойдет, а клетки её траектории – нет:
1
|
|
|
|
|
|
|
2
|
|
|
|
|
|
|
3
|
X
|
X
|
X
|
V
|
|
|
4
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Вторая такая клетка - Е1
1
|
|
о
|
о
|
о
|
о
|
|
2
|
|
о
|
|
|
о
|
|
3
|
X
|
X
|
X
|
V
|
о
|
|
4
|
|
о
|
|
|
о
|
|
5
|
|
о
|
о
|
о
|
о
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
1
|
|
X
|
X
|
X
|
V
|
|
2
|
|
X
|
|
|
X
|
|
3
|
X
|
X
|
X
|
V
|
X
|
|
4
|
|
X
|
|
|
X
|
|
5
|
|
X
|
X
|
X
|
X
|
|
6
|
|
|
|
|
|
|
|
A
|
B
|
C
|
D
|
E
|
F
|
Остальные клетки не годятся.
Ответ: 2.