Если с правой стороны от робота стена остаться на месте иначе сделать шаг вправо

Обновлено: 27.03.2024

Задачи алгоритмизации на основе исполнителя Robowin

Основные понятия

¨ Исполнитель - человек, животное или машина, способные понимать и выполнять некоторые команды.

¨ Среда исполнителя - предметы, которые окружают исполнителя и с которыми он работает.

¨ Список Команд Исполнителя (СКИ) - набор команд, понятных исполнителю. Исполнитель может выполнить только те команды, которые входят в его СКИ.

- Алгоритм - точно определенный план действий исполнителя, направленный на решение какой-то задачи. В алгоритм можно включать только те команды, которые есть в СКИ

Урок 1 Линейные алгоритмы. Исполнитель Робот.

В линейном алгоритме команды выполняются последовательно, одна за другой.

Среда Робота

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

1) свободным местом ;

Робот может переходить из клетки в клетку по грядкам или по свободным клеткам, ходить по клумбам с цветами запрещается. Он должен посадить цветы на всех грядках и вернуться на Базу, обозначенную специальным значком , для пополнения запасов.

Робот может двигаться вперед и назад, а также разворачиваться на 90 и 180 градусов влево или вправо. Конечно, в реальной обстановке на Робота влияет ветер, дождь, неровность земли и т.п., но мы их не будем учитывать. Такое упрощенное представление называется моделью работы Робота.

направо; повернуться на 90 градусов вправо

налево; повернуться на 90 градусов влево

кругом; развернуться кругом (на 180 градусов)

вперед ( n ); перейти на n клеток вперед

назад ( n ); перейти на n клеток назад

посади; посадить цветы на грядке в том месте, где стоит Робот

база Робот пришел на базу

Позже мы немного расширим СКИ и добавим в него новые команды.

задачи для решения . В архиве находятся 6 задач (обстановка для Робота), которые необходимо решить.

Урок 2 Циклы

Что такое цикл?

Часто исполнителю надо выполнить какую-то последовательность команд несколько раз. Например, в задаче на рисунке справа Робот должен подойти к ряду клеток, которые надо закрасить, и затем выполнить 6 раз команды вперед(1) и посади.


В данном случае эти команды надо повторить только 6 раза и можно легко 6 раз написать одинаковые команды. Но представьте, что надо сделать одинаковые операции 100 или 200 раз! В программировании в таких случаях используется специальная команда (оператор), которая говорит исполнителю, что какую-то часть программы надо сделать несколько раз.

¨ Цикл — это многократное исполнение последовательности команд

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

вперед ( 1 ); /* подойти к месту работы */

Правила использования цикла

1. Цикл повтори (или repeat) используется тогда, когда число повторений цикла заранее известно или может быть вычислено.

2. Оператор цикла начинается заголовком цикла - ключевым словом повтори, за которым в скобках указывается нужное количество повторений цикла.

3. Тело цикла начинается открывающей фигурной скобкой < и заканчивается закрывающей >.

4. В цикле выполняются все операторы, заключенные в скобки.

5. Если тело цикла включает всего один оператор, скобки можно не ставить.

6. Для того, чтобы легче разбираться в программе, применяют специальную систему записи с отступами: все команды, входящие в цикл, смещают вправо на 2-3 символа — это позволяет сразу видеть, где начинается и где заканчивается цикл.

Урок 3 Вложенные циклы

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


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

Для обработки одного ряда можно использовать цикл повтори(5) . В программе надо обработать 3 ряда, то есть написать три одинаковых цикла. Тогда получается, что можно снова использовать цикл повтори(3) для трех рядов, но внутри него также будет находиться цикл, который будет сажать цветы в ряду и переходить на новый ряд

¨ Вложенный цикл – это такой цикл, который находится внутри другого цикла.

повтори(5) это вложенный цикл, который сажает цветы в ряду

налево; это переход на новый ряд. Он пишется после вложенного цикла

Урок 4. Алгоритмы с обратной связью

Что такое обратная связь и зачем она нужна?

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

¨ Обратная связь - это информация об окружающей обстановке, которую исполнитель использует для выработки дальнейших действий.

Как Робот использует обратную связь?

Робот имеет датчики, которые позволяют ему получать информацию об обстановке. Датчики определяют, например, есть ли стена в каком-то направлении. Чтобы использовать эту информацию в программе, в СКИ Робота есть специальные логические команды.

Логическая команда - это вопрос, на который исполнитель (с помощью датчиков) отвечает “да” или “нет” в зависимости от обстановки.

СКИ Робота включает несколько логических команд:

справа_стена справа_ клумба справа_свободно

слева_стена слева_ клумба слева_свободно

впереди_стена впереди_ клумба впереди_свободно

сзади_стена сзади_клумба сзади_свободно

грядка база

Последние две команды определяют, есть ли грядка (или база) в клетке, где сейчас находится Робот.

Рассмотрим задачу. Где-то впереди робота есть стена и перед ним длинная грядка, количество шагов неизвестно.Робот стоит на базе. Необходимо посадить цветы на грядку и вернуться на базу


Цикл с условием

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

Тем не менее, есть четкое условие, по которому Робот должен закончить работу: если справа от него оказывается стена. Таким образом, Робот должен выполнять цикл пока справа свободно. Для этой цели служит специальный вид цикла - цикл пока (или while, от английского while - пока).

Так как по цветам ходить нельзя, то поднимемся на клетку вверх.

Обратно мы будем возвращаться до тех пор пока слева от робота будут клумбы с цветами.

И возвращаемся на базу

Урок 5 Алгоритмы ветвления.

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

Различают полную и неполную форму условного оператора. На данном уроке мы познакомимся с неполной формой команды ветвления.

команды; последовательность команд


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

если (слева _стена) проверка клетки есть ли слева стена

посади; робот посадил цветы и вернулся в исходную клетку

вперед(1); робот уходит в следующую

> непроверенную клетку коридора

Урок 5 Полная форма ветвления

Полная форма ветвления имеет вид

если (условие)

команды1;

иначе

команды2;

Правила использования условного оператора

1. Условный оператор состоит из двух частей; первая часть начинается ключевым словом если или if (от английского “если”), после которого в скобках записывается условие.

2. Если это условие верно (или истинно), то выполняется группа команд, стоящая ниже в фигурных скобках (блок-если).

3. Вторая часть (блок-иначе) начинается со слова иначе или else (от английского “иначе”) и выполняется в том случае, когда условие в скобках ложно.

4. Нельзя отделять блок-если и блок-иначе, поскольку они составляют единый оператор.

5. Условие ставится только в заголовке блока-если.

6. Блок-иначе может отсутствовать, если он не нужен; в этом случае мы говорим, что условный оператор записан в сокращенной форме.

Чтобы было удобнее разбираться в программе, используют отступы так же, как и в циклах: тело блока-если и блока-иначе сдвигается вправо на 2-3 символа

Рассмотрим на примере следующей задачи.


Где-то правее робота находится база. При движении многократно вправо мы видим, что возможны две ситуации. Они отмечены красной и синей точками. Если при движении вправо мы обнаружим слева стену, то выполняем последовательность команд, отмеченную на рисунке красными линиями. Иначе мы выполняем последовательность команд отмеченную синими линиями.

Хочу отметить следующую деталь.

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

Так как команда вправо(1); будет написана в теле цикла, которая будет перемещать Робота по нашему коридору ВПРАВО до БАЗЫ.

Если с правой стороны от робота стена остаться на месте иначе сделать шаг вправо

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, состоит из 8 команд. Четыре команды — это команды-приказы:

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

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

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

ПОКА условие

последовательность команд

выполняется, пока условие истинно.

ЕСЛИ условие

ТО команда 1

ИНАЧЕ команда2

выполняется команда1 (если условие истинно) или команда2 (если условие ложно)

В конструкциях ПОКА и ЕСЛИ условие может содержать команды проверки, а также слова И, ИЛИ, НЕ, обозначающие логические операции.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.

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

ПОКА снизу свободно ИЛИ справа свободно

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

ЕСЛИ справа свободно

Один из главных приёмов в решении этой задачи — проверять клетки группами, а не по одной.

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

Поэтому РОБОТ будет двигаться вправо или вниз, пока у него есть такая возможность. РОБОТ при данной программе никогда не разобьётся.

Проверив все клетки по выведенному нами правилу движения РОБОТА выясняем, что число клеток, удовлетворяющих условию задачи, равно 13 (вся шестая строчка, клетки A, B четвертой и пятой строчки, клетки C, D, E пятой строчки).

Раздел кодификатора ФИПИ: 1.6.2 Вычислимость. Эквивалентность алгоритмических моделей Задание 12 № 4686

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, состоит из 8 команд. Четыре команды - это команды-приказы:

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

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

Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

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

ПОКА условие

последовательность команд

выполняется, пока условие истинно

ЕСЛИ условие

ТО команда1

ИНАЧЕ команда2

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

В конструкциях ПОКА и ЕСЛИ условие может содержать команды проверки, а также слова И, ИЛИ, НЕ, обозначающие логические операции. Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.

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

ПОКА снизу свободно ИЛИ справа свободно

ЕСЛИ снизу свободно

ЕСЛИ справа свободно

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

Проанализировав эту программы приходим к выводу, что РОБОТ будет двигаться вправо или вниз, пока у него есть такая возможность. РОБОТ при данной программе никогда не разобьётся.

Видно, что существует всего 2 места, в которых робот может остановиться: нужная нам 6F и 3F. Робот может прийти в клетку 3F только если он находится в области 1B:3F и клетках 1A и 2A, количество клеток в этой области равно 17. Общее количество клеток лабиринта равна 36, следовательно, 36 − 17 = 19.

Раздел кодификатора ФИПИ: 1.6.2 Вычислимость. Эквивалентность алгоритмических моделей Ксения Михайлова 18.12.2013 08:19

Мне кажется, что робот может попасть в клетку F6 из клеток A1-A6 и B4-F6. В таком случае в сумме их 21.

Петр Мурзин

Из клеток А1 и А2 он попадёт в клетку F3. Для клетки А1: снизу свободно, Робот делает один шаг вниз, далее проверяет свободно ли справа. Поскольку в клетке А2 справа свободно, Робот выполняет команду вправо и оказывается в клетке В2. Далее цикл повторяется. На рисунке приведена траектория движения робота после выполнения цикла первый раз. Аналогично для клетки А2.

Задание 12 № 4843

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, состоит из 8 команд. Четыре команды - это команды-приказы:

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

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх вниз влево вправо

Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

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

ПОКА условие

последовательность команд

выполняется, пока условие истинно.

ЕСЛИ условие

ТО команда 1

ИНАЧЕ команда2

выполняется команда1 (если условие истинно) или команда2 (если условие ложно)

В конструкциях ПОКА и ЕСЛИ условие может содержать команды проверки, а также слова И, ИЛИ, НЕ, обозначающие логические операции.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.

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

ПОКА снизу свободно ИЛИ справа свободно

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

ЕСЛИ справа свободно

Один из главных приёмов в решении этой задачи — проверять клетки группами, а не по одной.

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

Проанализировав эту программу, приходим к выводу, что РОБОТ будет двигаться вниз или вправо, пока у него есть такая возможность. РОБОТ при данной программе никогда не разобьётся.

Проверив все клетки по выведенному нами правилу движения РОБОТА выясняем, что число клеток, удовлетворяющих условию задачи, равно 30 (все клетки за исключением E1:F3).

Раздел кодификатора ФИПИ: 1.6.2 Вычислимость. Эквивалентность алгоритмических моделей Задание 12 № 4931

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, состоит из 8 команд. Четыре команды — это команды-приказы:

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

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

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

ПОКА условие

последовательность команд

выполняется, пока условие истинно.

ЕСЛИ условие

ТО команда 1

ИНАЧЕ команда2

выполняется команда1 (если условие истинно) или команда2 (если условие ложно)

В конструкциях ПОКА и ЕСЛИ условие может содержать команды проверки, а также слова И, ИЛИ, НЕ, обозначающие логические операции.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.

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

ПОКА снизу свободно ИЛИ справа свободно

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

ЕСЛИ справа свободно

Один из главных приёмов в решении этой задачи — проверять клетки группами, а не по одной.

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

Поэтому РОБОТ будет двигаться вправо или вниз, пока у него есть такая возможность. РОБОТ при данной программе никогда не разобьётся.

Проверив все клетки по выведенному нами правилу движения РОБОТА выясняем, что число клеток, удовлетворяющих условию задачи, равно 14.

Раздел кодификатора ФИПИ: 1.6.2 Вычислимость. Эквивалентность алгоритмических моделей Задание 12 № 5272

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, состоит из 8 команд. Четыре команды −

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

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

Четыре команды проверяют истинность условия отсутствия стены у каждой

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

выполняется, пока условие истинно.

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

В конструкциях ПОКА и ЕСЛИ условие может содержать команды проверки, а также слова И, ИЛИ, НЕ, обозначающие логические операции.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится, и программа прервётся.

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

ПОКА снизу свободно ИЛИ справа свободно

ЕСЛИ снизу свободно

ЕСЛИ справа свободно

При данной программе РОБОТ поступает следующим образом: сперва РОБОТ проверяет, свободна ли клетка справа или снизу от него. Если это так, то РОБОТ переходит к первому действию внутри цикла. В этом цикле если у нижней стороны клетки, в которой находится РОБОТ, нет стены, он двигается вниз, в противном случае, если у правой стороны клетки нет стены, он перемещается вправо. После этого возвращается к началу внешнего цикла.

Проанализировав эту программу, приходим к выводу, что РОБОТ не может разбиться.

Проверив все клетки по выведенному нами правилу движения РОБОТА выясняем, что число клеток, удовлетворяющих условию задачи, равно 12 (клетки А4-6, B4-6, C5-6, D5-6, E6, F6).

Примечание. Робот будет на каждом новом круге последовательно проверять оба условия и выполнять их, и будет двигаться "лесенкой" пока это возможно, а не просто спускаться вниз до препятствия, а затем идти вправо. В частности, начав движение из клетки D4, робот будет перемещаться по пути D4—D5—E5—F5.

Заметим, что фраза «робот начнет движение и остановится» подразумевает, что «робот начнет выполнение программы и остановится», при этом робот не обязательно будет перемещаться в другую клетку.

Если с правой стороны от робота стена остаться на месте иначе сделать шаг вправо

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

alt

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

alt

Словами это можно сформулировать так: если есть проход (условие выполняется), то выполни одну группу команд, если нет – выполни другие команды. В программе для этой цели используется специальный условный оператор если

налево;
вперед(1);
посади;
назад(1);
направо;

Таким образом, мы определили два варианта действий Робота - первый работает тогда, когда обнаружен проход, а второй – когда справа стена.

Правила использования условного оператора

  1. Условный оператор состоит из двух частей; первая часть начинается ключевым словом если, после которого в скобках записывается условие.
  2. Если это условие верно (или истинно), то выполняется группа команд, стоящая ниже в фигурных скобках (блок-если).
  3. Вторая часть (блок-иначе) начинается со слова иначе и выполняется в том случае, когда условие в скобках ложно.
  4. Нельзя отделять блок-если и блок-иначе, поскольку они составляют единый оператор.
  5. Условие ставится только в заголовке блока-если.
  6. Блок-иначе может отсутствовать, если он не нужен; в этом случае мы говорим, что условный оператор записан в сокращенной форме.
  7. Чтобы было удобнее разбираться в программе, используют отступы так же, как и в циклах: тело блока-если и блока-иначе сдвигается вправо на 2-3 символа.

Немного изменим задачу – пусть теперь Роботу надо обрабатывать только по 1 клетке в начале каждого прохода. Таким образом, в блоке-иначе не осталось ни одной команды – если прохода нет, ничего делать не надо. Поэтому можно использовать сокращенную форму условного оператора – без второй части:

налево;
вперед(1);
посади;
назад(1);
направо;

Что такое сложные условия?

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

alt

Сначала можно сформулировать алгоритм на русском языке – иди вперед, пока не появится стена впереди. Если в какой-то момент справа от Робота стена И слева стена, надо посадить цветы в грядку.

В этом словесном алгоритмах мы объединяли логические команды Робота с помощью операции И, получив из двух простых условий одно сложное условие. То же самое можно делать и в программе:

если ( справа_стена И слева_стена )

Сложное условие – это условие, состоящее из двух или более простых условий, объединенных с помощью логических операций:

НЕ отрицание

И логическое умножение

ИЛИ логическое сложение

Правила использования сложных условий

    1. Простейшими условиями являются логические команду исполнителей (например, слева_стена) и логические отношения между числами. > 5, 2+n < x
        >= больше или равно a >= 2* x+5
          <= меньше или равно c+2*d <= 5*v
          не равно a != b
        1. В условии “равно” ставится два знака равенства; чтобы не запутаться, надо запомнить, что если переменная изменяется (оператор присваивания), то надо ставить один знак “=“, а если не меняется (логическое отношение), то два.
        2. Сложные условия составляются из нескольких простых; простые условия объединяются с помощью логических операций.
        3. Операция "И" требует одновременного выполнения двух условий, например:
          сверху_стена И снизу_стена
        4. Операция "ИЛИ" обозначается требует выполнения хотя бы одного из двух условий (или обоих вместе), например:
          сверху_стена ИЛИ снизу_стена
        5. Иногда удобно использовать логическую операцию “НЕ”, которая отрицает значение логического выражения, например условия
          a = a)
          означают одно и то же.
        6. Устанавливается такой приоритет (старшинство) логических отношений и операций:
          сначала выполняются операции в скобках, затем .
          операции “НЕ”, затем .
          логические отношения (>, =, <=, ==, !=), затем .
          операции “И” и в последнюю очередь
          операции “ИЛИ”.

        Для изменения порядка выполнения операций используются скобки.

        Использован материал из книги "Алгоритмы и исполнители", автор Поляков К.

        7Б "Робот". Задание №9: Рекурсия

        Робот находится в горизонтальном коридоре. Напишите алгоритм "к стене вправо закрашивая путь", который перемещает робота до правого конца коридора, закрашивая все клетки на своем пути, включая начальную.
        В этой задаче нельзя пользоваться конструкцией цикла нц. кц.
        Решение задачи сохраните в файле

        /kumir/09/A.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/A

        Задание 09-B

        Робот находится в горизонтальном коридоре. Напишите алгоритм "к стене вправо закрашивая путь затем вернуться", который перемещает робота до правого конца коридора, закрашивая все клетки на своем пути, включая начальную, затем возвращает в исходную клетку.
        В этой задаче нельзя пользоваться конструкцией цикла нц. кц.
        Решение задачи сохраните в файле

        /kumir/09/B.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/B

        Задание 09-С

        Робот находится в горизонтальном коридоре. Справа от робота есть закрашенная клетка. Напишите алгоритм "вправо симметрично закрашенной клетке", который доводит робота до закрашенной клетки, затем перемещает вправо на такое же расстояние, то есть робот должен остановиться в клетке, симметричной начальной позиции относительно закрашенной клетки.
        Решение задачи сохраните в файле

        /kumir/09/C.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/C

        Задание 09-D

        Выполните задание 09-C при дополнительном условии, что робот должен закрасить все клетки, через которые он проходит.
        Решение задачи сохраните в файле

        /kumir/09/D.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/D

        Задание 09-E

        Выполните задание 09-C при дополнительном условии, что робот должен закрасить все клетки между своим первоначальным расположением и первоначально закрашенной клеткой.
        Решение задачи сохраните в файле

        /kumir/09/E.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/E

        Задание 09-F

        Выполните задание 09-C при дополнительном условии, что робот должен закрасить все клетки между первоначально закрашенной клеткой и своим конечным расположением.
        Решение задачи сохраните в файле

        /kumir/09/F.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/F

        Задание 09-G

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

        /kumir/09/G.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/G

        Задание 09-H

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

        /kumir/09/H.kum
        Проверьте свой алгоритм на всех стартовых обстановках робота, находящихся в каталоге /home/pub/kumir/fields/09/H

        Задание 09-I

        Робот находится снизу от бесконечной стены (в соседней с ней клетке). Где-то слева от робота в стене есть проход. Робот должен дойти до прохода, пройти через проход и вернуться вправо на такое же расстояние (то есть робот должен оказаться в клетке, соседней с первоначальным положением, но по другую сторону стены).

        Задание 09-J

        Робот находится снизу от бесконечной стены, не обязательно в соседней со стеной клетке. Где-то слева от робота в стене есть проход. Робот должен обойти стену и оказаться в клетке, симметричной начальному положению относительно стены.

        Задание 09-K

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

        Задание 09-L

        Робот находится в левом конце горизонтального коридора. Коридор состоит из нечетного числа клеток. Переведите робота в среднюю клетку коридора.

        Задание 09-M

        Робот находится в горизонтальном коридоре. Справа от робота есть тупик. Возможно, что справа от робота есть клад (закрашенная клетка). Напишите программу, которая перемещает робота в клетку с кладом, если есть клад, или возвращает его в исходное положение, если клада нет.

        Задание 09-N

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

        Задание 09-O

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

        Задание 09-P

        Робот находится в горизонтальном коридоре, где-то справа от робота есть стена. Переместите робота к стене, закрасив все клетки до стены через одну. Клетка, где первоначально находился робот, должна быть закрашена.
        В этой задаче нельзя пользоваться конструкцией цикла нц. кц.

        Задание 09-Q

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

        Задание 09-R

        Робот находится в левом нижнем углу прямоугольного поля. В одной из клеток поля есть клад (закрашенная клетка). Переместите робота в клетку с кладом.
        В этой задаче нельзя пользоваться конструкцией цикла нц. кц.

        Задание 09-S

        Робот находится на бесконечном поле. Где-то правее робота (возможно, что и в той же клетке, где находится робот) есть закрашенная клетка. Робот должен закрасить квадрат, левый верхний угол которого – клетка, в которой робот находился первоначально, правый верхний угол которого – закрашенная клетка, и вернуться в начальную клетку.

        Задание 09-T

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

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

        Задание 09-U

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

        Задание 09-V

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

        7Б "Робот". Задание №10: Считаем шаги

        Целочисленным величинам можно присваивать значения. Величина должна быть определена в начале алгоритма.

        В заданиях этого листка нельзя пользоваться рекурсией!

        Задание 10-А

        Робот находится в горизонтальном коридоре. Справа от робота – тупик. Доведите робота до конца коридора, сосчитав шаги. Закрасьте самую правую клетку коридора и верните робота в исходную клетку.

        Задание 10-B

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

        Задание 10-C

        Робот находится снизу от бесконечной стены (в соседней с ней клетке). Где-то слева от робота в стене есть проход. Робот должен дойти до прохода, пройти через проход и вернуться вправо на такое же расстояние (то есть робот должен оказаться в клетке, соседней с первоначальным положением, но по другую сторону стены).

        Задание 10-D

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

        Задание 10-E

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

        Задание 10-F

        Робот находится снизу от бесконечной стены, не обязательно в соседней со стеной клетке. Передвиньте робота вправо на расстояние, равное расстоянию от робота до стены (робот должен остановиться в клетке, расположенной на это же горизонтали).

        Задание 10-G

        Робот находится в левом конце горизонтального коридора. Коридор состоит из нечетного числа клеток. Переведите робота в среднюю клетку коридора.

        Задание 10-H

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

        Задание 10-I

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

        Ответы для данных стартовых обстановок: 01 – 5, 02 – 4, 03 – 14, 04 – 0, 05 – 0.

        Задание 10-J

        Робот находится в горизонтальном коридоре. Справа от робота есть тупик. Возможно, что справа от робота есть клад (закрашенная клетка). Напишите программу, которая перемещает робота в клетку с кладом, если есть клад, или возвращает его в исходное положение, если клада нет.

        Задание 10-K

        Робот находится снизу от бесконечной стены, не обязательно в соседней со стеной клетке. Где-то слева от робота в стене есть проход. Робот должен обойти стену и оказаться в клетке, симметричной начальному положению относительно стены.

        Задание 10-L

        Робот находится на прямоугольном поле. Закрасьте клетку, расположенную в правом нижнем углу поля и верните робота в исходное положение.

        Задание 10-M

        Робот находится в левом верхнем углу прямоугольного поля. Подсчитайте количество клеток в этом поле и выведите его инструкцией "вывод". Для умножения величин используется операция "*".

        Ответы для данных стартовых обстановок: 01 – 20, 02 – 4, 03 – 150, 04 – 1, 05 – 70.

        Задание 10-N

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

        Задание 10-O

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

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

        Задание 10-P

        Робот находится на бесконечном поле. Где-то правее робота (возможно, что и в той же клетке, где находится робот) есть закрашенная клетка. Робот должен закрасить квадрат, левый верхний угол которого – клетка, в которой робот находился первоначально, правый верхний угол которого – закрашенная клетка, и вернуться в начальную клетку.

        Задание 10-Q

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

        Если с правой стороны от робота стена остаться на месте иначе сделать шаг вправо

        Цели. Познакомиться с возможностью использования ветвлений для Робота, использовать для решения задач.

        Общий вид ветвления (неполная форма):

        если условие то

        серия команд

        Общий вид ветвления (полная форма):

        если условие

        серия команд1

        серия команд2

        Создавая циклы с условием для Робота , можно использовать 10 команд проверки условий:

        – 8 команд вида [слева/справа/снизу/сверху] [стена/свободно]

        – 2 команды вида клетка [закрашена/чистая]

        Пример 1. Робот находится в узком горизонтальном коридоре. Где-то правее робота из коридора есть выход, расположенный сверху или снизу коридора. Доведите робота до выхода из коридора.

        На рисунках представлены возможная стартовая обстановка и результат.


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

        если снизу свободно



        Цикл с условием для продвижения вправо
        сдвиг вправо

        проверка, есть ли выход сверху

        выход в проход сверху


        проверка, есть ли выход снизу

        Пример 2. Робот находится в одной из двух клеток прямоугольного поля размером 1x2. Переведите робота в соседнюю клетку.

        проверка, можно ли пройти вверх

        проверка, можно ли пройти вниз

        проверка, можно ли пройти вправо

        Задание 1. Робот находится в одном из углов квадрата 2x2. Переместите робота в противоположный угол квадрата.

        Задание 2. Робот находится в левом конце горизонтального коридора, идущего вправо. Нижняя стена коридора сплошная, а в верхней стене есть несколько выходов. Напишите алгоритм, который перемещает робота к правому концу коридора, и при этом робот закрашивает все клетки коридора, из которых есть выходы вверх.
        Задание 3. Из банка заданий ГИА выберите задачу типа № 20.1, которую можно решить с помощью ветвления.

        Задание 4. Придумать задачу для Робота, в которой целесообразно использовать ветвление .

        Читайте также: