"Информатика. (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Вспомогательный алгоритм — именованный набор команд для отдельной части задачи. Его можно вызвать из основного алгоритма, выполнить нужные действия и вернуться к прежнему месту. Так сложное решение становится понятнее: повторяющиеся команды описывают один раз, а затем используют по имени. Если действия похожи, но работают с разными данными, алгоритму передают параметры. Важно различать описание подпрограммы и её вызов: первое задаёт действия, второе запускает их.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Вспомогательный алгоритм — именованная последовательность команд, которую вызывают из другого алгоритма для выполнения отдельной части работы. Например, набор команд для рисования квадрата можно описать отдельно и запускать, когда квадрат понадобится. Такое название помогает не повторять длинную последовательность действий.
Основной алгоритм — алгоритм, который управляет решением всей задачи и обращается к вспомогательным алгоритмам. Он задаёт общий порядок работы: что выполнить сначала, где запустить подпрограмму и что делать после неё. Благодаря этому отдельные действия складываются в единое решение.
Подпрограмма — оформленный фрагмент алгоритма, имеющий имя и выполняющий самостоятельное действие. Это удобная форма записи вспомогательного алгоритма: команды собраны вместе и понятны как единый блок. Подпрограмму можно описать отдельно от основной последовательности, чтобы обращаться к ней по имени.
Вызов вспомогательного алгоритма — команда обращения к подпрограмме по её имени, после которой управление временно передаётся ей. Исполнитель начинает выполнять команды подпрограммы, а не следующую команду основного алгоритма. Когда работа подпрограммы закончена, выполнение продолжается с места вызова.
Сложную задачу удобно разделять, потому что в ней часто есть несколько самостоятельных действий: например, подготовить рисунок, повторить фигуру и завершить построение. Если все команды записать подряд, длинную последовательность труднее понять и проверить. Основной алгоритм тогда показывает общий план, а вспомогательные — подробности отдельных частей. При изменении одной части не приходится переписывать весь план решения.
Чтобы исполнитель мог обратиться к нужному фрагменту, вспомогательному алгоритму дают имя, а затем описывают его команды. Имя должно отличать эту подпрограмму от других и быть одинаковым в описании и при вызове. Внутри записывают действия в том порядке, в котором их следует выполнить. Такое описание не обязательно запускается сразу: оно задаёт, что именно исполнитель сделает, когда получит команду вызова.
При вызове основная последовательность приостанавливается, потому что сначала нужно выполнить порученное действие. Исполнитель переходит к началу подпрограммы и выполняет её команды по порядку. Дойдя до конца, он возвращается в основной алгоритм к команде, следующей за вызовом. Поэтому вызов работает как временный переход, а не как окончательный уход из основной последовательности.
Описанную подпрограмму можно вызывать несколько раз, так как её команды не нужно заново включать в основной алгоритм. Например, для орнамента из четырёх одинаковых квадратов достаточно один раз задать построение квадрата и вызвать его четыре раза. Это сокращает запись и уменьшает риск случайно внести разные команды в одинаковые фигуры. Если способ построения квадрата изменится, достаточно исправить его описание.
Параметры нужны, когда действие остаётся похожим, а исходные данные меняются. Например, подпрограмма строит прямоугольник, но получает длину и ширину при каждом вызове. В одном случае ей можно передать значения 4 и 2, в другом — 6 и 3. Параметры делают описание универсальным: не требуется создавать отдельную подпрограмму для каждого набора размеров.
| Свойство | Основной алгоритм | Вспомогательный алгоритм |
|---|---|---|
| Назначение | Описывает решение всей задачи | Выполняет отдельную повторяющуюся или самостоятельную часть |
| Способ запуска | Начинает выполняться первым | Запускается командой вызова |
| Завершение работы | Определяет общий результат решения | Возвращает управление в место вызова |
| Повторное использование | Обычно выполняется как единая схема | Может вызываться многократно |
| Связь с данными | Передаёт команды и организует их выполнение | Может получать параметры |
Сравнивайте алгоритмы по строкам: так видно, кто задаёт общий ход решения, а кто выполняет отдельное действие. Если фрагмент нужен в нескольких местах, проверьте, можно ли описать его как вспомогательный алгоритм и вызывать по имени.
Условие. В алгоритме рисования квадрата несколько раз встречается последовательность «нарисовать сторону, повернуть на прямой угол». Нужно оформить повторяющуюся часть как вспомогательный алгоритм. Идея решения — найти действие, которое можно назвать и использовать многократно.
Ответ. Повторяющиеся действия выделены в подпрограмму «Сторона», а основной алгоритм вызывает её четыре раза. Так команды описаны один раз, и основная последовательность показывает устройство квадрата яснее.
Условие. Нужно нарисовать орнамент из нескольких одинаковых квадратов, используя вспомогательный алгоритм «Квадрат». Каждый квадрат уже можно построить отдельной подпрограммой, поэтому в новом алгоритме нужно организовать повторение вызовов и расположение фигур.
Ответ. Основной алгоритм задаёт перемещения и вызывает «Квадрат» в нужных местах. Построение каждой фигуры при этом остаётся одинаковым, потому что его команды собраны в одной подпрограмме.
Условие. Нужно нарисовать несколько прямоугольников с разными длинами и ширинами. Вместо отдельного алгоритма для каждого размера создадим подпрограмму «Прямоугольник» с параметрами длины и ширины. Эти данные определят, насколько длинными будут противоположные стороны.
Ответ. Одна подпрограмма строит прямоугольники разных размеров, потому что получает параметры при вызове. Структура команд остаётся общей, меняются только переданные длина и ширина.
Для работы с подпрограммами нужно знать, что такое алгоритм, исполнитель, команда и последовательность действий, а также уметь составлять простые алгоритмы. Тема помогает научиться разбивать задачу на части и замечать действия, которые повторяются: это связано с повторением команд и структурным программированием. Позже тот же подход пригодится при создании программ с процедурами, функциями и повторно используемыми модулями. Имена и параметры помогут организовать такие части программы.
Зачем выделять часть алгоритма в отдельную подпрограмму?
Так длинный алгоритм легче читать: каждая подпрограмма отвечает за отдельную часть задачи. Повторяющиеся команды достаточно описать один раз, а затем вызывать по имени.
Чем вспомогательный алгоритм отличается от основного?
Основной алгоритм организует решение всей задачи и обычно начинает выполняться первым. Вспомогательный выполняет отдельную часть работы и запускается командой вызова.
Что происходит после команды вызова вспомогательного алгоритма?
Основной алгоритм временно приостанавливается, а исполнитель выполняет команды подпрограммы. Когда она заканчивается, управление возвращается к команде после вызова.
Можно ли вызвать одну и ту же подпрограмму несколько раз?
Да, если нужно выполнить описанное действие в разных местах алгоритма. При каждом вызове исполнитель снова выполняет команды подпрограммы.
Зачем нужны параметры вспомогательного алгоритма?
Параметры позволяют подпрограмме работать с данными, которые меняются от вызова к вызову. Например, одна процедура построения прямоугольника может получать разные длину и ширину.
§ 34. Вспомогательные алгоритмы