Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:


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

Цикл ПОКА

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

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

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

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

Действие обратной связи можно описать такой схемой:

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

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

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

  1.  Логическая команда – это условие, которое может быть верным (истинным) или неверным (ложным).

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

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

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

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

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

 грядка  база

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

Пример 1 (задача z4-3.maz). Роботу надо придти на Базу, которая расположена на краю стенки. Расстояние от Робота до стенки и длина стенки неизвестны.

Сначала Роботу надо подойти к стенке. Если бы мы управляли Роботом вручную, то надо было бы поступать так:

  1. выдать запрос впереди_свободно;
  2. если Робот получил от датчиков ответ “нет”, то он выполнил задание и находится у стены;
  3. если получен ответ “да”, то сделать шаг вперед и повторить весь процесс.

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

Подход

{

                   

  

направо;

}

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

{

вперед ( 1 );

 }

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

вперед ( 1 );

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

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

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

Для того, чтобы придти на Базу, в программе используется цикл пока не база. Это условие истинно (верно), если Робот еще на пришел на Базу и надо двигаться дальше. Если Робот вступил в клетку, где находится База, условие база стало истинным, а условие не база – ложным, поэтому цикл закончится.

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

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

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

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

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

 Ничего

 {

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

    вперед ( 1 );

 }

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

Пример 3. В этом примере программа для Робота составлена так, что он врежется в стенку и сообщит об ошибке “НЕ МОГУ”.

 Диверсия

 {

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

    {

    вперед ( 2  );

    }

 }

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

Пример 4. Эта программа приводит к зацикливанию, так как условие справа_стена выполняется всегда и Робот не меняет своего места.

 Зацикливание

 {

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

    {

    кругом; кругом;

    }

 }


Использование цикла пока позволяет нам решать задачи, в которых некоторые данные (например, длина стенок) заранее неизвестны.

Пример 5. Посадить цветы во всех клетках по периметру прямоугольной стены, считая, что расстояние до нее и ее размеры неизвестны.

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

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

 Контур

 {  

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

 вперед(1);  /* подойти к стене */

налево;

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

 назад(1);      /* в левый нижний угол */

повтори ( 4 )

 {

 вперед (1); /* теперь справа стена */

    

 посади; /* угловая клетка */

 направо;

 }

 

   

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

 {

 посади;

 вперед(1);

 }

     

   

     

 }


Задачи

1. Посадить цветы во всех грядках клетках между стенками и вернуться обратно. Толщина стены – 1 клетка, остальные размеры считать неизвестными.

        

    1    2     3

2. Посадить цветы во всех грядках. Толщина стены – 1 клетка, остальные размеры считать неизвестными. Все размеры считать неизвестными.

       

         3     5

    

   6     7




1. 155 см вес до 70 кг; объем черепа около 600 см3; вероятно использовал предметы в качестве орудий для добывания
2. варианта трассы Сечение горизонталей 50 м
3. БЕЛЫЙ ТИГР- Фантом Пресс; Москва; 2008 Аннотация Балрам по прозвищу Белый Тигр простой парень из типичн
4. Сумо
5. Защита программы от нелегального копирования
6. Лабораторна робота 19 ЕКСПЕРИМЕНТАЛЬНА ПЕРЕВІРКА РІВНЯННЯ БЕРНУЛЛІМета роботи Дослід
7. вариант бога Рудра Вишну вариант бога Сурьи бог солнца Брахма Группа учителейотшельников занимают
8. тематики в 5 классе по теме Треугольники и четырехугольники
9. Анализ деятельности предприятия Западные электрические сети ОАО Алтайэнерго
10. Реферат- Информационное общество и право
11. Course of the Cold Wr led to rivlry with ntions of the Wrsw Pct which formed in 1955
12. На тему Государство Израиль Выполнила Студентка 1 курса английского отделения Группы F1101 Копба
13. Реферат- Зигмунд Фрейд- концепция психоанализа
14. Міжнародна економіка методичні вказівки
15. Статья- Транспортные средства для коммерческих перевозок пассажиров или опасных грузов должны быть оснащен
16. темами 2122 Варіант 1 Структура функції служби документаційного забезпечення управління
17. Уравнения с параметрами
18. 23140
19. ТЕМА загальна фармакологія У другій половині вагітності жінка приймала транквілізатори групи бензодіаз
20. Принцип деятельности в психологии