А сейчас решим следующую задачу.
Пусть требуется составить программу, по которой ГРИС напишет на экране четырехзначное число 1919:
Конечно, можно поступить так, как в предыдущей задаче, написав одну длинную программу, по которой Кенгуренок шаг за шагом нарисует эти цифры. Но, очевидно, возникает другая идея: поскольку здесь дважды повторяются цифры 1 и 9, нельзя ли сократить работу, написав программу рисования той и другой цифры только один раз? Это действительно можно сделать.
Алгоритм, по которому решается некоторая подзадача из основной задачи и который, как правило, выполняется многократно, называется вспомогательным алгоритмом.
В языках программирования их называют подпрограммами или процедурами. Последнее название будем использовать в языке управления графическим исполнителем.
В таком случае программа решения поставленной задачи разделяется на основную программу (основной алгоритм) и процедуры (вспомогательные алгоритмы). Каждая процедура должна иметь свое уникальное имя. Для рассматриваемой задачи имена процедур выберем следующими: Единица и Девять. Тогда в основной программе команды обращения к этим процедурам будут такими:
сделай Единица
сделай Девять
По этим командам управление передается соответствующим процедурам и после их выполнения управление вернется к следующей команде основной программы.
Договоримся, что начальное и конечное состояния ГРИС при вычерчивании каждой цифры будет таким, как показано стрелками на рисунке (внизу, на восток). У единицы начальное и конечное состояния совпадают. Основная программа:
сделай Единица
прыжок
сделай Девять
прыжок
сделай Единица
прыжок
сделай Девять
Вот и все! Так просто! Но теперь надо «объяснить» исполнителю, что такое Единица и что такое Девять. Это делается в описаниях процедур (см. ниже; порядок выполнения – по столбцам).
процедура Единица
поворот
шаг
шаг
шаг
шаг
поворот
поворот
прыжок
прыжок
прыжок
прыжок
поворот
конец процедуры
процедура Девять
шаг
поворот
шаг
шаг
шаг
шаг
поворот
шаг
поворот
шаг
шаг
поворот
шаг
поворот
поворот
поворот
прыжок
прыжок
поворот
конец процедуры
Давайте составим для Кенгуренка алгоритм изображения знакомой нам фигуры – «креста», используя вспомогательный алгоритм (начальное положение Кенгуренка обозначено на рисунке).
Очевидно, заданная фигура состоит из четырех элементов, изображенных на другом рисунке. Действия, которые должен выполнить Кенгуренок, чтобы нарисовать этот элемент (начальное положение как на первом рисунке), запишем в виде вспомогательного алгоритма Скобка:
процедура Скобка
поворот
поворот
шаг
поворот
шаг
поворот
шаг
конец процедуры
Теперь можно составить основной алгоритм:
сделай Скобка
поворот
сделай Скобка
поворот
сделай Скобка
поворот
сделай Скобка
Можно сказать, что мы «научили» Кенгуренка совершать новое для него действие: рисовать скобку. И теперь это действие можно использовать для изображения не только данного, но и многих других рисунков.
Данные примеры познакомили вас с новой командой из СКИ графического исполнителя – командой обращения к процедуре. Ее формат, то есть общий вид, следующий:
сделай <имя процедуры>
Определение процедуры в программе называется ее описанием. Формат описания процедуры:
процедура <имя процедуры>
<тело процедуры>
конец процедуры
Имя в описании и имя в обращении должны точно совпадать (никаких склонений по падежам!). Описание процедур располагается после основной программы.
Добавив к программе описание процедуры, мы тем самым расширили систему команд исполнителя. В данной программе стало возможным использование команды обращения к этой процедуре.
Использованный нами подход облегчает программирование сложных задач. Задача разбивается на более простые подзадачи. Решение каждой оформляется в виде вспомогательного алгоритма, а основной алгоритм организует связку между ними.
Метод программирования, при котором сначала пишется основная программа, затем в ней записываются обращения к пока еще не составленным подпрограммам, а потом описываются эти подпрограммы, называется методом последовательной детализации. Причем количество шагов детализации может быть гораздо большим, чем в нашем примере, поскольку сами подпрограммы могут содержать внутри себя обращения к другим подпрограммам.
Возможен и другой подход к построению сложных программ: первоначально составляется множество подпрограмм, которые могут понадобиться при решении задачи, а затем пишется основная программа, содержащая обращения к ним. Подпрограммы могут быть объединены в библиотеку подпрограмм и сохранены в долговременной памяти компьютера. Такую библиотеку можно постепенно пополнять новыми подпрограммами.
Например, если для управления графическим исполнителем создать библиотеку процедур рисования всех букв и цифр, то программа получения любого текста будет состоять из команд обращения к библиотечным процедурам.
Описанный метод называется сборочным программированием. Часто в литературе по программированию используется такая терминология: метод последовательной детализации называют программированием сверху вниз, а сборочный метод – программированием снизу вверх.
1. Что такое основной алгоритм; вспомогательный алгоритм?
2. Чем отличается описание вспомогательного алгоритма от обращения к вспомогательному алгоритму?
3. Каковы правила описания вспомогательных алгоритмов (процедур) для исполнителя ГРИС?
4. Как записывается команда обращения к процедуре в языке исполнителя ГРИС?
5. В чем суть метода последовательной детализации?
6. Что такое программирование снизу вверх, сверху вниз?
№ 6. Используя вспомогательные алгоритмы, нарисовать:
№ 7. Используя в качестве вспомогательных алгоритмов программы из задачи № 1, помогите Кенгуренку написать слова: 1) ПЕРО; 2) ПОРОГ; 3) БОР; 4) БЕРЕГ; 5) ПЕРЕЦ; 6) БОРЕЦ; 7) ГЕРБ; 8) ГОРЕЦ.
№ 8. Что нарисует Кенгуренок на бесконечном листе бумаги, выполняя следующий алгоритм:
а) сделай Скобка
сделай Скобка
сделай Скобка
б) сделай Скобка
поворот
поворот
сделай Скобка
№ 9. Во вспомогательном алгоритме Скобка злоумышлении стер две команды. В результате, выполнив приведенный алгоритм рисования «креста», Кенгуренок вместо первого рисунка изобразил «лесенку». Какие команды стер злоумышленник?
№ 10. Составьте для Кенгуренка вспомогательный алгоритм поворота направо. Используя этот вспомогательный алгоритм, составьте алгоритм рисования скобки, начиная с нижнего правого конца.
№ 11. Составьте для Кенгуренка алгоритмы рисования фигур, изображенных на рисунке. Какой общий вспомогательный алгоритм естественно составить для рисования них фигур?
|