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

Здравствуйте, уважаемые пользователи.

В данном блоге будут рассмотрены задачи алгоритмизации на основе исполнителя Robowin. Скачать исполнителя можно с сайта автора К. Полякова.

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

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

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

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

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

 

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

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

      Среда Робота

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

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

2) грядкой   или

3) стенкой .

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

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

¨  СКИ Робота:

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

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

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

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

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

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

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

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

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

Урок 2 Циклы

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

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

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

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

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

 

Ряд

{

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

 повтори ( 6 )

    {

  вперед ( 1 );

  посади;

     }

}

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

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

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

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

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

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

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

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

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

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

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

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

повтори(3)

  {

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

         {

        вперед(1);

       посади;

       вперед(1);

         }

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

 вперед(1);

налево;

вперед(10);

направо;

вперед(1);

направо;

 }

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

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

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

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

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

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

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

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

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

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

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

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

    грядка                    база

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

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

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

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

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

пока ( впереди_свободно )

   {

    вперед ( 1 );

    посади;

   }

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

  налево:

  вперед(1);

  налево;

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

пока ( слева_клумба )

   {

    вперед ( 1 );

   }

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

налево;

вперед(1);

 

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

 

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

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

 

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

  {                                     Если условие истинное, то выполняется 

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

 

  }

 

Рассмотрим задачу.

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

 

Пока ( справа_стена)

  {

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

       {                                                                   

          назад(1);

          налево;

          вперед(2);

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

 

          назад(2);                       

          направо;

          вперед(1);

        }

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

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

 

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

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

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

   {

     команды1;

    }

иначе

   {

     команды2;

   }

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

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

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

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

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

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

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

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

 

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

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

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

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

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

Итак наш алгоритм будет выглядеть следующим образом:

 

  Программа

 {

  пока ( не база )

    {

     если ( слева_стена )

       {

        назад ( 1 );

        налево;

        вперед ( 2 );

        направо;

        вперед ( 1 );

        посади;

        назад ( 1 );

        направо;

        вперед ( 2 );

        налево;

        вперед ( 1 );

       }

     иначе

       {

        направо;

        вперед ( 2 );

        посади;

        назад ( 2 );

        налево;

       }

     вперед ( 1 );

    }

 }

Скачать: