Ваш браузер устарел. Рекомендуем обновить его до последней версии.

Меню сайта


Счётчик посещений


 

счетчик посещений

Часы

Календарь

Обратная связь

Поля, помеченные символом *, обязательны для заполнения.

14. Система команд исполнителя РОБОТ, живущего в прямоугольном лабиринте на клетчатой плоскости:

 

вверх вниз влево вправо

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

сверху свободно

снизу свободно слева свободно справа свободно

Цикл

ПОКА <условие> команда

выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?

 НАЧАЛО

ПОКА <справа свободно> вправо

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

ПОКА <сверху свободно> вверх

КОНЕЦ

 

Ответ: 3

Решение:

Сначала построим траекторию движения робота.

 

 

 

 

Красной точкой обозначена клетка, из которой начнет движение робот. Клетка, из которой должен начать движение робот, должна быть сверху ограничена барьером. Стена, окружающая лабиринт, также является барьером. Если это условие не будет выполняться, то робот пройдет дальше и не остановится в клетке, с которой начал движение. Отметим клетки,ограниченные сверху барьером. Это и будут потенциальные клетки,которые нам нужно найти.

 

 

 

 

 

 

 

Теперь проверим каждую из этих точек.

 

 


1. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

2. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

3. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

4. Проверяем условие <справа свободно> ? - НЕТ, переходим к анализу условия <снизу свободно >

Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

5. Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

6. Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

7. Проверяем условие <снизу   свободно> ? - НЕТ, переходим к анализу условия <слева свободно>

Проверяем условие <слева   свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

8.  Проверяем условие <слева   свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

9. Проверяем условие <слева   свободно> ? - НЕТ, переходим к анализу условия <сверху свободно>

Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

10. Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

11. Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

12. Проверяем условие <сверху свободно> ? - НЕТ, следовательно, нужно переходить к следующей команде, но цикл закончен. То есть Робот завершил свое движение.

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

 


 1. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

2. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

3. Проверяем условие <справа свободно> ? - НЕТ, переходим к анализу условия <снизу свободно >

Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

4. Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

5. Проверяем условие <снизу   свободно> ? - ДА, следовательно, Робот движется вниз на 1 клетку

6. Проверяем условие <снизу   свободно> ? - НЕТ, переходим к анализу условия <слева свободно>

Проверяем условие <слева   свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

7.  Проверяем условие <слева   свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

8. Проверяем условие <слева   свободно> ? - НЕТ, переходим к анализу условия <сверху свободно>

Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

9. Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

10. Проверяем условие <сверху   свободно> ? - ДА, следовательно, Робот движется вверх на 1 клетку

11. Проверяем условие <сверху свободно> ? - НЕТ, следовательно, нужно переходить к следующей команде, но цикл закончен. То есть Робот завершил свое движение.

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

 


Теперь  продемонстрирую те клетки, удовлетворяющие граничным условиям:

 

Подробней остановлюсь на последней клетке, та, что в левом нижнем углу.

1. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

2. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

3. Проверяем условие <справа свободно> ? - ДА, следовательно, Робот движется вправо на 1 клетку

4. Проверяем условие <справа свободно> ? - НЕТ, переходим к анализу условия <снизу свободно >

Проверяем условие <снизу свободно> ? - НЕТ, переходим к анализу условия <слева свободно>

Проверяем условие <слева свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

5.  Проверяем условие <слева свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

6. Проверяем условие <слева свободно> ? - ДА, следовательно, Робот движется влево на 1 клетку

7. Проверяем условие <слева свободно> ? - НЕТ, переходим к анализу условия <сверху свободно>

Проверяем условие <сверху свободно> ? - НЕТ, следовательно, нужно переходить к следующей команде, но цикл закончен. То есть Робот завершил свое движение и остановился не в той же клетке, из которой начал свой путь.

Итого 3 клетки

 

НАЗАД