|
|
>>> Перейти на мобильный размер сайта >>> Учебник для 7 класса Информатика и ИКТ§ 3.3. Управление исполнителем РоботЗнакомимся с РоботомИсполнитель Робот действует на прямоугольном клетчатом поле. Между некоторыми клетками поля могут быть расположены стены. Некоторые клетки могут быть закрашены (рис. 3.11).
Рис. 3.11
Робот занимает ровно одну клетку поля. По командам вверх, вниз, влево и вправо Робот перемещается в соседнюю клетку в указанном направлении. Если на пути оказывается стена, то происходит отказ — выдается сообщение о невозможности выполнить очередную команду. По команде закрасить Робот закрашивает клетку, в которой стоит. Если клетка уже была закрашена, то она закрасится повторно, хотя никаких видимых изменений не произойдет. Важно помнить, что Робот может исполнять только правильно записанные команды. Например, если вместо команды вниз написать внис, то Робот эту запись не поймет и сразу же сообщит об ошибке.
Пример алгоритма управления РоботомНапишем программу, исполняя которую Робот нарисует на клетчатом поле меандр из пяти витков (рис. 3.12).
Рис. 3.12 Программа может иметь вид:
Здесь мы использовали конструкцию повторения, так как совершенно одинаковые фрагменты повторяются на рисунке 5 раз. При записи тела цикла мы в одной строке через точку с запятой записывали несколько команд. Если оформить процедуру виток, то основная программа окажется совсем короткой.
Цикл «пока»А теперь попробуем написать программу для решения очень простой задачи: закрасить все клетки справа от Робота (рис. 3.13).
Рис. 3.13 Правда, сколько именно клеток следует закрасить, не уточнено. Известно только, что:
Воспользуемся тем, что Робот может анализировать и сообщать обстановку вокруг себя, проверяя следующие простые условия:
слева свободно сверху свободно снизу свободно закрашено Ясно, что пока будет выполняться условие справа свободно, нужно выполнять команды:
закрась Для оформления таких последовательностей действий используется специальная конструкция алгоритмического языка — цикл «пока».
В общем виде цикл «пока» записывается так:
Блок-схема цикла «пока» имеет вид, показанный на рис. 3.14.
Рис. 3.14 При выполнении этого цикла исполнитель повторяет следующие действия:
Напишем программу, исполняя которую Робот нарисует на клетчатом поле меандр (рис. 3.12), число витков которого зависит от положения правой стены. Виток меандра умещается на клетчатом поле, если между клеткой, занимаемой Роботом, и правой стеной есть 1 клетка.
В зависимости от исходного положения Робота тело цикла пока может не выполниться ни разу. Такая ситуация не является отказом.
Из-за логических ошибок, допущенных при составлении алгоритма, может возникнуть ситуация зацикливания. Это значит, что условие будет всегда соблюдаться, и выполнение цикла «пока» никогда не завершится. Рассмотрим следующий пример:
Условие в цикле «пока» проверяется только перед выполнением тела цикла, но не в процессе его выполнения.
Простые и составные условияВ цикле «пока» могут использоваться не только простые, но и составные условия. Составное условие образуется из одного или нескольких простых условий и служебных слов И, ИЛИ, НЕ. Рассмотрим составное условие А И В, где А, В — простые условия. Условие А И В выполнено, когда выполнено каждое из двух входящих в него простых условий. Пусть А — простое условие сверху свободно, В — простое условие справа свободно. Рассмотрим подробно проверку составного условия А И В — сверху свободно и справа свободно (рис. 3.15).
Рис. 3.15 В случае а выполнено условие А (сверху свободно), выполнено условие В (справа свободно). Составное условие АИВ (сверху свободно И справа свободно) также выполнено. В случае б выполнено условие А, условие В не выполнено. Составное условие А И В не выполнено. В случае в не выполнено условие А, условие В выполнено. Составное условие А И В не выполнено. В случае г не выполнено условие А, не выполнено условие В. Составное условие А И В не выполнено.
Составное условие А ИЛИ В выполнено, когда выполнено хотя бы одно из двух входящих в него простых условий. Рассмотрим проверку составного условия А ИЛИ В — сверху свободно ИЛИ справа свободно (см. рис. 3.15). В случае а выполнено условие А (сверху свободно), выполнено условие В (справа свободно). Составное условие А ИЛИ В (сверху свободно ИЛИ справа свободно) выполнено. В случае б выполнено условие А, не выполнено условие В. Составное условие А ИЛИ В выполнено. В случае в не выполнено условие А, выполнено условие В. Составное условие А ИЛИ В выполнено. В случае г не выполнено условие А, не выполнено условие В. Составное условие А ИЛИ В не выполнено.
Составное условие НЕ А выполнено, когда не выполнено условие А. Пусть А — простое условие закрашено. Рассмотрим проверку составного условия НЕ А (рис. 3.16).
Рис. 3.16 В случае а условие А выполнено, условие НЕ А (НЕ закрашено) не выполнено. В случае б условие А не выполнено, условие НЕ А (НЕ закрашено) выполнено. Рассмотрим пример использования составного условия. Известно, что Робот находится где-то в вертикальном коридоре. Ни одна из клеток коридора не закрашена. Составим алгоритм, под управлением которого Робот закрасит все клетки этого коридора и вернется в исходное положение. Так как Роботу предстоит закрасить только клетки коридора, мы должны «научить» его их распознавать. Чем же клетки коридора отличаются от всех прочих клеток поля? Из рис. 3.17 видно, что каждая клетка коридора слева и справа ограничена стеной.
Рис. 3.17 Робот находится в коридоре, пока слева стена и справа стена. В СКИ нашего исполнителя такие условия не предусмотрены. Там есть противоположные условия: слева свободно, справа свободно. Используем служебное слово НЕ:
Нужное условие примет вид:
Представим план действий Робота укрупненными шагами (рис. 3.18).
Рис. 3.18 Для простоты предположим, что над коридором и под коридором есть хотя бы по одной клетке без стен (иначе придется делать дополнительные проверки сверху свободно, снизу свободно). 1. Чтобы закрасить все клетки коридора, находящиеся выше Робота, прикажем Роботу шагнуть вверх и выполним цикл «пока»:
Под управлением этого алгоритма Робот закрасит все клетки коридора, находящиеся выше от него, и окажется на клетке рядом с верхней границей коридора.
2. Командой вниз вернем Робота в коридор. Наша задача — вернуть его в исходную точку. Эта точка имеет единственный отличительный признак — она не закрашена. Поэтому пока занимаемая Роботом клетка оказывается закрашенной, будем перемещать его вниз:
Под управлением этого алгоритма Робот окажется в исходной клетке. 3. Выполнив команду вниз, Робот пройдет исходную клетку и займет первую клетку, расположенную ниже исходной. Теперь можно закрашивать клетки коридора, расположенные ниже исходной:
4. Так как, выполнив предыдущий алгоритм, Робот окажется под коридором, командой вверх вернем его в коридор. Возвращение в исходную точку обеспечивается алгоритмом:
5. По команде закрась Робот закрашивает исходную точку. Полностью программа управления Роботом выглядит так:
Команда ветвленияВспомним, что форма организации действий, при которой в зависимости от выполнения или невыполнения некоторого условия совершается либо одна, либо другая последовательность действий, называется ветвлением. Графически ветвление можно представить, как показано на рис. 3.19.
Рис. 3.19 Для организации ветвлений в СКИ Робота предусмотрена специальная команда ЕСЛИ. Ее общий вид:
Служебные слова ЕСЛИ, ТО, ИНАЧЕ имеют обычный смысл. Между ТО и ИНАЧЕ записываются одно или несколько действий, составляющих серию действий 1. Между ИНАЧЕ и КОНЕЦ помещается серия действий 2. Служебное слово ИНАЧЕ вместе с серией действий 2 может отсутствовать (сокращенная форма ветвления). Пусть теперь Робот находится в горизонтальном коридоре, нижняя граница которого сплошная, а в верхней имеются выходы (рис. 3.20). Требуется провести Робота через весь коридор и закрасить клетки коридора, не имеющие верхних границ.
Рис. 3.20 Единственным признаком коридора является наличие нижней границы, т. е. выполнение условия НЕ снизу свободно. Если при этом выполняется условие сверху свободно, то клетку нужно закрасить, иначе — красить не надо. Аналогично случаю закрашивания вертикального коридора, предполагаем, что слева и справа от горизонтального коридора есть клетки. Блок-схема алгоритма имеет вид, показанный на рис. 3.21.
Рис. 3.21 Программа:
Коротко о главномИсполнитель Робот действует на прямоугольном клетчатом поле. Между некоторыми клетками поля могут быть расположены стены. Некоторые клетки могут быть закрашены. Робот занимает ровно одну клетку поля. Система команд исполнителя представлена в следующей таблице:
Робот может выполнять цикл «повторить n раз». Если заранее не известно, сколько именно раз следует выполнить тело цикла, используется специальная конструкция алгоритмического языка — цикл «пока». В цикле «пока» могут использоваться не только простые, но и составные условия. Составное условие образуется из одного или нескольких простых условий и служебных слов И, ИЛИ, НЕ. Для организации ветвлений в СКИ Робота предусмотрена специальная команда ЕСЛИ.
Вопросы и задания
|
|
|