20.1. Понятие вспомогательного алгоритма
Как видно из предыдущего параграфа, исполнителю Черепаха нередко приходится строить одно и то же изображение в одной программе несколько раз. Построение этого изображения удобно оформить в виде отдельного алгоритма. Такие алгоритмы называют вспомогательными.
Вспомогательный алгоритм – алгоритм, который можно целиком использовать в других алгоритмах. |
Вспомогательный алгоритмы можно использовать необходимое число раз, обращаясь к его названию (имени). Для обращения к вспомогательному алгоритму в блок-схемах используется блок:
Вспомогательный алгоритм в языке Python записывается в виде функции:
Имя функции может содержать буквы латинского алфавита, цифры, знак подчеркивания (_). Первый символ в имени процедуры не может быть цифрой. После имени функции ы скобках могут указываться параметры, от которых зависит результат работы функции. Если параметров нет, то наличие скобок все равно является обязательным. После скобок ставится двоеточие – «:». Все команды, которые относятся к телу функции пишутся со сдвигом вправо. Сдвиг устанавливают клавишей Tab.
Команду выполнения вспомогательного алгоритма называют вызовом функции. Команду вызова записывают в основном алгоритме (программе) путем указания имени процедуры.
Пример 20.1. Написать программу для рисования елочки с использованием вспомогательного алгоритма.
В примере 19.8 мы уже строили елочку, используя изображение треугольников. Если проанализировать алгоритм, то можно увидеть, что команда Построить треугольник указана трижды. Это значит, что можно не копировать три раза команды для изображения треугольника, а оформить вспомогательный алгоритм, который будет строить треугольник.
Треугольник строился с помощью следующих команд:
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120) |
Опишем эту последовательность команд в виде вспомогательного алгоритма treug, который будет использоваться в неизменяемом виде несколько раз (в данном случае три раза).
В этой программе есть еще три команды, которые повторяются трижды:
turtle.penup()
turtle.setpos(…, …)
turtle.pendown() |
Эти команды позволяют осуществить переход от одного треугольника к другому Различие в использовании этих команд только в координатах, в которые должна переместиться Черепаха. Можно оформить еще одну функцию, которая будет осуществлять переход. Эта функция будет зависеть от координат точки, в которую нужно переместит Черепаху. Назовем эту функцию – p(x, y). В примере 20.2 приведена измененная программа.
Если считать, что рисование треугольника зависит от точки, в которой Черепаха начинает его рисовать, то функция рисования треугольника тоже будет зависеть от параметров (x, y). Алгоритм рисования треугольника в этом случае буде начинаться с команды перевода Черепахи в точку с координатами (x, y). Программа приведена в примере 20.3. В данном примере функция p вызывается из функции treug.
20.2. Решение практических задач с использованием функций
Пример 20.4. Оформить с помощью функций программу рисования трех троек на почтовом конверте из примера 19.11.
Функция для рисования одной тройки cifr_3 будет функцией, которая зависит от начального положения Черепахи – координат (x, y). Функцию р(x, y) , устанавливающую Черепаху в нужную точку возьмем из примера рисования елочки.
Поскольку каждая тройка должна рисоваться своим цветом, то добавим еще один параметр c в описание функции.
На примере рисования елочки и трех троек мы увидели, что вспомогательные алгоритмы позволяют сократить код программы, поскольку не приходится одинаковые части программы записывать несколько раз. Однако вспомогательные алгоритмы используют и тогда, когда задача разбивается на части – подзадачи. Вспомогательный алгоритм решает некоторую подзадачу основной задачи.
Пример 20.5. Написать программу для построения изображения, состоящего из трех цифр 1, 3 и 7, изображенных красным, зеленым и синим цветами.
В данном случае в изображении нет повторяющихся фрагментов. Однако задача разбивается на три подзадачи:
- нарисовать цифру 1;
- нарисовать цифру 3;
- нарисовать цифру 7.
Функцию для рисования цифры 3 можно взять из предыдущего примера. Остается написать функции для рисования цифр 1 и 7.
При решении реальных задач над проектом могут работать несколько человек. Каждый выполняет свою часть работы и оформляет ее как отдельный вспомогательный алгоритм. Важно, чтобы вспомогательные алгоритмы, написанные разными людьми, правильно выполнялись в одном проекте. Для этого устанавливаются определенные договоренности, позволяющие определить единые подходы к написанию текста программы.
Для исполнителя Черепаха такой договоренностью условимся считать следующее правило: рисование любой фигуры начинается с перевода Черепахи в начальную точку. Начальной точкой договоримся считать нижний левый угол изображения. В начальной точке Черепаха смотрит вправо (на восток).
Рассмотрим следующий пример. Пусть нескольким шестиклассникам поручили разработать программу рисования некоторого «пейзажа». «Пейзаж» состоит из следующих элементов: дом, три ели (одна большая и две маленькие) и сосна (пример 20.6).
Список функций для рисования «пейзажа» приведены в примере 20.7
Шестеро шестиклассников могут распределить работу между собой следующим образом:
- первый пишет вспомогательный алгоритм рисования сосны;
- второй пишет вспомогательный алгоритм рисования дома;
- третий пишет вспомогательный алгоритм рисования треугольника. В этом алгоритме желательно добавить еще один параметр – длина стороны треугольника;
- четвертый пишет вспомогательный алгоритм для маленькой елки, основываясь на вспомогательном алгоритме рисования треугольника. Координата x у обоих треугольников одинакова, координата y может быть вычислена по формуле y + 0.86•d, где d – длина стороны треугольника;
- пятый пишет вспомогательный алгоритм для большой елки, основываясь на вспомогательном алгоритме рисования маленькой елки;
- шестой пишет основной алгоритм, размещая элементы пейзажа на поле Черепахи.
Программа рисования «пейзажа» размещена в примере 20.8.
Имея в своем распоряжении вспомогательные алгоритмы, можно легко изобразить и другие «пейзажи». При этом не придется переписывать сами вспомогательные алгоритмы. Достаточно выбрать место размещения объекта на поле Черепахи, указав координаты начальной точки объекта.
Например, можно сохранить все функции из примера 20.8, а в текст основной части программы внесли изменения (пример 20.9).
Результат работы программы после изменений показан в примере 20.10.
Примеры рассмотренные в данном параграфе, наглядно демонстрируют необходимость использования вспомогательных алгоритмов. Они позволяют решать сложные задачи более эффективным и удобным способом, облегчают и укоряют работу программного кода, повышают его читабельность. Применение функций обусловлено, если:
для получения решения задачи некоторые действия приходится повторять неоднократно (как в примерах 20.2 и 20.4;
задача разбивается на независимые подзадачи (как в примерах 20.5, 20.8, 20.9).
|
|
|