Вспомогательным называется алгоритм, снабженный заголовком, позволяющим вызывать этот алгоритм из других алгоритмов. Любой алгоритм можно сделать вспомогательным, снабдив его соответствующим заголовком (т. е. указав название, исходные данные и результат). Примеры вспомогательных алгоритмов:
Алгоритм "Скобка".
Повернуть налево.
Повернуть налево.
Сделать шаг.
Повернуть налево.
Сделать шаг.
Повернуть налево.
Сделать шаг.
Алгоритм "Поиск максимума из двух чисел".
Аргументы: х и у - числа, среди которых ищется максимальное.
Результат: z - максимум из чисел х и у.
Если х<у, то:
Присвоить z значение у.
Иначе:
Присвоить z значение х.
Конец ветвления.
Вспомогательные алгоритмы создаются тогда, когда возникает необходимость многократного использования одного и того же набора действий в одном или в разных алгоритмах, а также для решения сложных задач, когда задача разбивается на ряд более простых задач (в этом суть метода пошаговой детализации).
Если при составлении какого-либо алгоритма потребовалась "помощь" уже имеющегося вспомогательного алгоритма, достаточно воспользоваться командой вызова вспомогательного алгоритма. В ней указывается название вспомогательного алгоритма, а также значения исходных данных (если они предусмотрены в заголовке вспомогательного алгоритма). Примеры:
Выполнить алгоритм "Скобка".
Выполнить алгоритм "Максимум", взяв в качестве х число
25, а в качестве у значение выражения а2 + b2.
Составляя для исполнителя вспомогательные алгоритмы, мы как бы "обучаем" исполнителя новым действиям. В результате этого подробные объяснения того, что нужно делать, можно заменить одной командой.
При использовании вспомогательного алгоритма достаточно знать, что является его исходными данными и результатом. Иногда в основном алгоритме используются те же обозначения переменных, что и во вспомогательном. Поэтому считают, что все обозначения из вспомогательного алгоритма, кроме результатов, действительны только в пределах этого алгоритма. При вызове вспомогательного алгоритма значения переменных основного алгоритма как бы "замораживаются", а после окончания работы вспомогательного алгоритма - "размораживаются".
Результаты, ради которых основной алгоритм "обращается" к вспомогательному, не всегда пригодны для дальнейшего использования исполнителем алгоритма (сообщения, например). В таких случаях вводят специальную - сигнальную - переменную и ее значениями кодируют результат. Каждому из возможных результатов соответствует свое значение сигнальной переменной. Например, сообщение "да" может кодироваться числом 0, а сообщение "кет" - числом 1.
Хотя циклов и развилок достаточно, чтобы записать любой алгоритм, вспомогательные алгоритмы - мощное средство, облегчающее решение трудных задач. Можно сказать, что искусство составления алгоритмов заключается в умении конструировать сложный алгоритм из более простых алгоритмов, т. е. в умении обучать исполнителя, идя от простого к сложному.
Вспомогательные алгоритмы можно не только выделять из уже готовых алгоритмов. Гораздо более эффективно используются преимущества вспомогательных алгоритмов в методе пошаговой Детализации (последовательного построения) алгоритмов. При этом сложная задача разбивается на несколько более простых. Предполагая, что вспомогательные алгоритмы решения этих задач уже построены, записывают основной алгоритм, состоящий главным образом из команд вызова вспомогательных алгоритмов. Затем определяются требования к этим алгоритмам. Требования Диктуются как задачами, решаемыми каждым из вспомогательных алгоритмов, так и необходимостью их "стыковки" в основном алгоритме. Некоторые из задач, на которые разбита исходная задача, могут оказаться еще слишком сложными. Тогда они в свою очередь разбиваются на более простые задачи и т. д. В результате некоторые вспомогательные алгоритмы могут стать основными по отношению к вспомогательным алгоритмам более низкого уровня. Процесс пошаговой детализации заканчивается, когда задачи очередного уровня окажутся совсем простыми.
Метод пошаговой детализации алгоритмов универсален. Он применим для решения задач из самых разных областей жизни.
Подпрограммы - это вспомогательные алгоритмы, записанные на языке, понятном ЭВМ. Оформление подпрограмм отличается от оформления вспомогательных алгоритмов. Вот пример вспомогательного алгоритма и соответствующей подпрограммы для ВЫЧИСЛИТЕЛЯ (аналогично оформляются подпрограммы для ЧЕРТЕЖНИКА):
Вспомогательный алгоритм
Алгоритм "Поиск максимума из двух чисел".
Аргументы: х и у.
Результат: z.
Если х<у, то:
Присвоить z значение у.
Иначе:
Присвоить г значение х.
Конец ветвления.
Подпрограмма
20 ПОДПРОГРАММА [X, Y]
25 ЕСЛИ X<Y, TO:
30 Z = Y
35 ИНАЧЕ:
40 Z = X
45 КОНЕЦ ВЕТВЛЕНИЯ
50 КОНЕЦ
ПОДПРОГРАММЫ [Z]
Таким образом, при оформлении подпрограммы ее имя, а также слова "Аргументы" и "Результаты" надо опускать. Буквы, обозначающие аргументы, записываются в квадратных скобках после слова "ПОДПРОГРАММА". Подпрограмма завершается командой "КОНЕЦ ПОДПРОГРАММЫ". После этих слов в квадратных скобках записывают буквы, обозначающие результаты работы подпрограммы (если, конечно, таковые имеются).
Подпрограммы обычно договариваются располагать после основной программы.
При вызове подпрограммы роль имени играет номер первой строки подпрограммы. Команда вызова подпрограммы начинается со слов "ВЫПОЛНИТЬ ПОДПРОГРАММУ", после них пишется номер строки, с которой начинается подпрограмма. Затем в квадратных скобках перечисляют выражения, значения которых ЭВМ должна взять в качестве исходных данных.
Вот, например, как выглядит вызов подпрограммы "Поиск максимума..." при x = a + bc, a y = a/b + c: