Урок 38. Процедуры.

advertisement
Урок 38.
Scribbler Program Maker GUI.
Процедуры.
Процедура - это независимый фрагмент программы, который может быть вызван из
другой части Вашей программы. Когда вызывающая программа обращается к процедуре,
выполнение вызывающей программы временно останавливается и начинается выполнение
процедуры, по окончании выполнения процедуры продолжается выполнение вызывающей
программы.
В программе может существовать восемь различных процедур, каждая из которых имеет
свой цвет, включая главную программу, которая всегда зеленая. Процедура всегда
начинается с блока начала процедуры, содержащую шестеренку, определяющую цвет
процедуры, и заканчивается блоком «конец процедуры». Процедуры всегда
выстраиваются в программе в порядке своих цветов. Начинаются с зеленой главной
программы, порядок цветов следующий: зеленый, желтый, оранжевый, красный,
сиреневый, фиолетовый, голубой, и циан. В примере, приведенном выше, в начале идет
зеленая главная программа, затем идут процедуры желтая и оранжевая. Главная
программа вызывает желтую процедуру, в процедуре выполняется одна команда,
запускающая движение робота. Оранжевая процедура в программе не вызывается. Если
такую программу загрузить в робота, то оранжевая процедура загружаться не будет.
Есть два способа добавить процедуру в Вашу программу. Первый способ - это щелкнуть
по кнопке Make a new subroutine (создать новую процедуру), как показано на рисунке
вверху. Откроется окно создания процедуры, где с помощью кнопки Вы можете выбрать
цвет создаваемой процедуры. Если в программе уже есть процедуры, то их цвета
отсутствуют в выбираемых цветах. В программе может быть только одна процедура
каждого цвета. Второй способ - это вызвать процедуру либо с помощью кнопки Call a
subroutine (вызов процедуры), либо с помощью такой же кнопки, находящейся в других
блоках, в этом случае процедура автоматически создается, если она еще не создана.
Процедуры могут быть вложены одна в другую максимум три раза. Например, зеленая
© Parallax Inc.
процедура вызывает оранжевую, которая вызывает синюю, которая вызывает красную. Но
красная процедура уже не может вызвать процедуру другого цвета. Процедура не может
вызвать саму себя. Блок выхода из процедуры
Блок выхода из процедуры обеспечивает выход из процедуры в любом месте в
процедуре. В приведенном вверху примере желтая процедура в цикле осуществляет
проверку препятствия слева. Когда препятствие исчезает, выполняется команда движения
робота вперед и осуществляется выход из процедуры.
© Parallax Inc.
Редактирование процедуры
Когда Вы выберите редактирование процедуры, щелкнув кнопкой мыши либо по блоку
начала, либо по блоку конца процедуры, вся процедура вместе со своим содержимым
будет выделена. Щелкнув затем правой кнопкой мыши, Вы можете выполнять обычные
действия вырезания, копирования и удаления. Если вызов выделенной процедуры
существует в программе и Вы выполняете команду удаления, то удалится только
содержимое процедуры, а начальный и конечный блок процедуры останутся в программе.
Если в программе нет вызова выделенной процедуры, то она удалится целиком.
Когда Вы вырезаете или копируете процедуру, то копируется только содержимое
процедуры, и Вы можете вставить это содержимое в другую процедуру.
Для изменения цвета процедуры после выделения и открытия окна редактирования,
щелкните по кнопке процедуры, и Вы увидите окно, показанное на рисунке выше. Щелкая
мышью, Вы можете выбрать любой из оставшихся свободными цветов процедуры.
Наверху вы видите две иконки, одна изображает старый цвет процедуры, другая новый,
рядом расположено пустое окошко (checkbox). Если в этом окошке поставить галочку, то
одновременно с изменением цвета процедуры соответственно изменится и цвет вызова
процедуры. Если же в окошко галочку не ставить, то после изменения цвета процедуры
создастся новая процедура с указанным цветом, а старая процедура станет пустой, и в
программе останется вызов старой процедуры. Когда Вы измените цвет процедуры, она
может поменять свое расположение на листке. Это происходит потому, что процедуры
расположены на листке в порядке цветов.
Вырезание и вставка вызовов процедуры.
© Parallax Inc.
В примере на рисунке выше два блока движения, каждый из них вызывает процедуру,
после выделения и вырезания обоих блоков движения с вызовами получится картинка,
показанная на рисунке ниже.
Процедуры стали неактивными, так как исчезли вызовы процедур. Затем мы вставим
вырезанные блоки в желтую процедуру.
Посмотрим, что произошло. В блоке, вызывавшем желтую процедуру, цвет процедуры
изменился на серый. Это произошло потому, что процедура не может вызвать сама себя, и
желтый цвет в этом месте недопустим. Серый цвет указывает на ошибку и предлагает
заменить цвет процедуры. Если Вы загрузите программу с серым блоком в робота, то
вызов серой процедуры будет исключен из программы по причине ошибки.
Будем создавать программу с помощью процедур, в которой робот в бесконечном цикле
повисает на ожидании закрытия левого светового сенсора, если сенсор закрыт, он издает
звуковой сигнал и выходит из цикла. Входит во второй бесконечный цикл, в котором:
1. Если произошло столкновение, то:
a. Включает все три индикатора
b. Останавливается.
c. Издает звук.
d. Отъезжает назад в течение 1 секунды.
e. Гасит индикаторы.
f. Случайным образом поворачивается направо или налево.
© Parallax Inc.
2. Иначе, если помеха слева, то:
a. Включает левый индикатор.
b. Поворачивает направо в течение 1 секунды.
c. Гасит индикаторы.
3. Иначе, если помеха и слева и справа, то:
a. Включает средний индикатор.
b. Отъезжает назад в течение 1 секунды.
c. Гасит индикаторы.
4. Иначе, если помеха справа, то:
a. Включает правый индикатор.
b. Поворачивает влево в течение 1 секунды.
c. Гасит индикаторы.
5. Иначе (в этом случае путь свободен) двигается вперед в течение 1 секунды.
Желтая процедура ожидает закрытия светового сенсора, в ней конец цикла заменен на
конец процедуры.
Красная процедура обрабатывает реакцию на столкновение.
Сиреневая процедура обрабатывает помеху слева.
Фиолетовая процедура обрабатывает помеху и слева и справа.
Голубая процедура обрабатывает помеху справа
Программа приведена ниже. Для ясности главная программа находится на этой странице,
а процедуры - на следующей. Создайте и выполните эту программу.
© Parallax Inc.
Задание
1. Напишите программу с помощью процедур, в которой робот стоит на месте и
анализирует помехи. Если помеха слева, то зажигает на 1 секунду левый
индикатор, если помеха справа, то зажигает на 1 секунду правый индикатор, если
помеха и слева и справа, то зажигает на 1 секунду средний индикатор, если нет
помехи, то гасит все индикаторы. Процедуры должны обрабатывать помехи.
Автор уроков Каган Григорий Владимирович.
gvkagan58@yandex.ru
телефон (4852) 55-87-19, сотовый 8-915-975-67-46
© Parallax Inc.
Download