Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Информатика и ИКТ 7 кл Босова Л.Л..doc
Скачиваний:
10
Добавлен:
01.03.2025
Размер:
11 Мб
Скачать
☆

§ 3.3 Управление исполнителем Робот Знакомимся с Роботом

И сполнитель Робот действует на прямоугольном клетчатом поле. Между некоторыми клетками поля могут быть расположены стены. Некоторые клетки могут быть закрашены (рис. 3.11). 

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

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

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

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

Пример алгоритма управления Роботом

Напишем программу, исполняя которую Робот нарисует на клетчатом поле меандр из пяти витков (рис. 3.12).   

Программа может иметь вид:

ПОВТОРИТЬ 5 РАЗ

 вправо  закрась; влево   закрась; влево   закрась; вверх   закрась; вверх   закрась; вправо; закрась   вправо; вправо; вправо   вниз; вниз 

КОНЕЦ

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

Если оформить процедуру виток, то основная программа окажется совсем короткой.

Вспомогательный алгоритм: Основной алгоритм:  ПРОЦ виток  ПОВТОРИТЬ 5 РАЗ НАЧАЛО виток

Вправо КОНЕЦ  закрась; влево  закрась; влево  закрась; вверх  закрась; вверх  закрась; вправо; закрась  вправо; вправо; вправо  вниз; вниз 

К ОНЕЦ Предложите свой вариант программы для рисования меандра.                                                                          

Цикл «пока»   А теперь попробуем написать программу для решения очень простой задачи: закрасить все клетки справа от Робота (рис. 3.13).

Правда, сколько именно клеток следует закрасить, не уточнено. Известно только, что:

    1. справа на неизвестном расстоянии есть стена;

    2. клетки нужно красить, пока Робот не подойдет к стене вплотную.

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

справа свободно  слева свободно  сверху свободно  снизу свободно  закрашено

Ясно, что пока будет выполняться условие справа свободно, нужно выполнять команды:

вправо  закрась

Для оформления таких последовательностей действий используется специальная конструкция алгоритмического языка — цикл «пока».

ПОКА справа свободно ДЕЛАТЬ 

 вправо   закрась 

КОНЕЦ   

В общем виде цикл «пока» записывается так:

ПОКА <условие> ДЕЛАТЬ

 <тело цикла (последовательность команд)> 

КОНЕЦ

Блок-схема цикла «пока» имеет вид, показанный на рис. 3.14.

 

При выполнении этого цикла исполнитель повторяет следующие действия:

    1. проверяет записанное после служебного слова ПОКА условие;

    2. если условие не соблюдается (Робот ответил «Нет»), то выполнение цикла прекращается, и Робот начинает выполнять команды, записанные после служебного слова КОНЕЦ. Если же условие соблюдается (Робот ответил «Да»), то Робот выполняет тело цикла и снова проверяет условие. 

Напишем программу, исполняя которую Робот нарисует на клетчатом поле меандр (рис. 3.12), число витков которого зависит от положения правой стены.

Виток меандра умещается на клетчатом поле, если между клеткой, занимаемой Роботом, и правой стеной есть 1 клетка.

ПОКА справа свободно ДЕЛАТЬ 

 вправо   закрась; влево   закрась; влево   закрась; вверх   закрась; вверх   закрась вправо; закрась   вправо; вправо; вправо   вниз; вниз 

КОНЕЦ 

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

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

Из-за логических ошибок, допущенных при составлении алгоритма, может возникнуть ситуация зацикливания. Это значит, что условие будет всегда соблюдаться, и выполнение цикла «пока» никогда не завершится.

Рассмотрим следующий пример: 

П ОКА справа свободно ДЕЛАТЬ       вправо; влево КОНЕЦ 

Что будет происходить, если справа от Робота нет стены?

Условие в цикле «пока» проверяется только перед выполнением тела цикла, но не в процессе его выполнения. 

П одумайте, что произойдет, если Робот начнет выполнять нашу программу рисования меандра с циклом «пока», находясь в следующем исходном положении: Что общего у циклов «повторить п раз» и «пока»? Какие между ними отличия? Нужны ли две конструкции для описания повторяющихся действий?