Среда, 08.01.2025, 11:26
Сайт учителя информатики Фрюауф М.А.
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
для 7 класса [0]
для 8 класса [0]
..
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Урок 6

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

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

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

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

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/1.png

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

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

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

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

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

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

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

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

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

грядка база

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

Пример 1 . Роботу надо придти на Базу, которая расположена на краю стенки. Расстояние от Робота до стенки и длина стенки неизвестны.

 

http://aleksej19770109.ucoz.ru/7777/10/2.png

 

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

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

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

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/3.png

 

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

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

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

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

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

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

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

Ничего

{

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

вперед ( 1 );

}

 

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/4.png

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/5.png

 

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/6.png

 

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

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

 

http://aleksej19770109.ucoz.ru/7777/10/7.png

Задание

Повтори самостоятельно все задачи, предложенные в примерах и пришли мне все скрипшоты окна программы

Вход на сайт
Поиск
Календарь
«  Январь 2025  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Архив записей
Друзья сайта
Copyright MyCorp © 2025