Будь умным!


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

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

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

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

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

Цикл ПОКА

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

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

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

  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. Тема- Технологический процесс производства мороженого пломбир
2. А.М. РУТКЕВИЧ ОТ ФРЕЙДА К ХАЙДЕГГЕРУ
3. РЕФЕРАТ дисертації на здобуття наукового ступеня доктора економічних наук Київ
4. Тема- Окно как составная часть деревянного русского зодчества Ундалова М
5. Задание по Отечественной истории Жирным шрифтом выделены наиболее важные события.html
6. Тема 1.1 Технологии обработки информации Вопросы- 1Персональный компьютер ~ устройство для обработки ин
7. Введение Настоящие методические указание представляют собой руководство к лабораторным ра
8. на тему- Музичне сприйняття і музична реабілітація ЗМІСТ Вступ Сприйняття музики Музичне мислен
9. Буддизм и исмаилизм точки пересечения и линии сопоставления
10. ГКСДЮШОР Комета
11. Воспитание детей в Японии
12. тема об~єднуюча ~ ПЕССО
13. Нестандартная сексуальность
14. unffected scornистинное презрение 2.html
15. Основні поняття мови програмування Delphi 50
16. Теория иерархии потребностей А
17. Основные черты феодального уголовного права и процесса по каролине
18. культурология Введение Задачей языкознания является изучение конкретных проявлений различных языков а
19. а наименование уполномоченного органа государственной власти Российской Федерации органа государстве
20. малих жанрів в англійському театрі XVIІІ ст