"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В.М. Котов, А.И. Лапо, Е.Н. Войтехович
Вспомогательный алгоритм — отдельный набор команд для повторяющейся или самостоятельно выделенной части задачи. Ему дают понятное имя, чтобы основной алгоритм мог обратиться к нему одним вызовом, а не записывать все команды заново. Основной алгоритм задаёт порядок решения, запускает нужные вспомогательные алгоритмы и продолжает работу после их завершения. Такое разбиение делает решение короче и помогает использовать одни и те же команды повторно.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Вспомогательный алгоритм — отдельный алгоритм для выполнения повторяющейся или самостоятельно выделенной части задачи. Например, если несколько раз нужно выполнить один набор действий, его можно описать один раз и запускать по необходимости. Это помогает не переписывать одинаковые команды и сосредоточиться на общем решении.
Основной алгоритм — алгоритм, который задаёт общий ход решения и при необходимости обращается к вспомогательным алгоритмам. В нём указывают, какие этапы и в каком порядке нужно выполнить. Благодаря этому видно, как отдельные части складываются в решение всей задачи.
Вызов вспомогательного алгоритма — команда в основном или другом вспомогательном алгоритме, которая запускает его выполнение. Вызов обычно записывают по имени алгоритма, поэтому имя должно точно совпадать с его описанием. Это позволяет понять, какой набор команд нужно выполнить в данной точке решения.
Сначала прочитай условие и найди действия, которые повторяются, либо этап, который можно выполнить как отдельную часть работы. Например, приготовление каждой порции напитка может состоять из одного и того же набора команд. Если оставить эти команды в основном алгоритме и повторить их несколько раз, запись разрастётся и её будет сложнее проверять. Выделенный фрагмент можно описать один раз, а затем вызывать в нужных местах.
Вспомогательному алгоритму дают собственное имя, потому что при вызове нужно однозначно указать, какую последовательность команд выполнить. Имя выбирают по смыслу: например, Приготовить порцию или Убрать стол. Слишком общее имя не помогает понять назначение алгоритма, а разные имена для одного и того же фрагмента могут запутать. Имя вызова должно соответствовать имени описания.
Описание вспомогательного алгоритма записывают отдельно от основного. Сначала указывают его имя и начало, затем перечисляют команды в нужном порядке, а в конце отмечают завершение. Такая запись показывает границы отдельного блока: где его выполнение начинается и какие именно действия он включает. Поэтому при проверке можно рассматривать команды блока независимо от остального решения.
Когда основной алгоритм доходит до команды вызова, выполнение временно передаётся вспомогательному алгоритму с указанным именем. Его команды выполняются по порядку, как обычная последовательность действий. После завершения управление возвращается к основному алгоритму, и тот переходит к следующей после вызова команде. Поэтому вызов не означает, что всё основное решение закончилось.
Разделение на основной алгоритм и помощников делает запись короче, потому что повторяющиеся команды не приходится каждый раз копировать. Оно также повышает понятность: общий план виден отдельно, а подробности каждого этапа собраны в своём блоке. Если этот этап понадобится в другой части задачи, можно повторно вызвать его по имени. При этом исправление в описании помощника применяется во всех местах его вызова.
| Признак | Основной алгоритм | Вспомогательный алгоритм |
|---|---|---|
| Назначение | Задаёт общий порядок решения задачи. | Выполняет отдельную или повторяющуюся часть. |
| Место записи | Содержит основной план действий. | Записывается отдельно под собственным именем. |
| Как начинается выполнение | Запускается как общее решение задачи. | Начинает выполняться после вызова по имени. |
| Что происходит после завершения | Решение заканчивается после выполнения всех его команд. | Управление возвращается к месту вызова. |
Сравнивай алгоритмы по их роли, а не по количеству команд: короткий блок тоже может быть вспомогательным. В основном алгоритме ищи общий порядок, а в помощнике — действия, которые выполняются как отдельный этап. Строка о завершении показывает, куда переходит выполнение после блока.
Условие. Нужно составить алгоритм приготовления нескольких одинаковых порций напитка, каждый раз выполняя один и тот же набор действий. Если записать этот набор отдельно для каждой порции, команды будут повторяться и в них легко допустить различия. Поэтому сначала определим общий фрагмент, который подходит для одной порции.
Ответ. Основной алгоритм повторяет вызов Приготовить порцию для каждой порции. Сам набор действий описан один раз, поэтому его проще проверить и изменить.
Условие. Нужно описать алгоритм рисования квадрата, стороны которого строятся одинаково. После каждой стороны направление меняется поворотом, поэтому в решении повторяется связка из двух действий. Удобно объединить её в один фрагмент, чтобы основной алгоритм показывал число повторений.
Ответ. Квадрат строится четырьмя вызовами вспомогательного алгоритма Провести сторону и повернуть. Если в используемой среде поворот задаётся иначе, в помощнике указывают нужную команду поворота.
Условие. Нужно составить алгоритм уборки комнаты, отдельно описав уборку стола и пола. Это разные этапы: у каждого свой набор действий, но общий алгоритм должен задавать, в каком порядке они выполняются. Поэтому здесь полезны два помощника и один основной план.
Ответ. Основной алгоритм задаёт последовательность этапов, а два вспомогательных описывают их выполнение. Если условие требует сначала убрать пол, достаточно изменить порядок вызовов в основном алгоритме.
Команды помощника записывают прямо в основной алгоритм и повторяют их для каждого случая. Так часто делают, потому что кажется, будто повторённые команды понятнее, но запись становится длинной и отдельный блок теряет смысл. Проверь себя: если одинаковый фрагмент встречается несколько раз, можно ли заменить его описание одним помощником и вызовами?
Вызывают алгоритм по имени, которого нет в описании. Ошибка возникает, если имя придумали отдельно при записи вызова или написали его по-разному в разных местах. Сверь каждое имя вызова с заголовком соответствующего алгоритма: они должны совпадать.
Считают, что после вызова основной алгоритм прекращается. Из-за этого можно забыть команды, которые должны выполняться дальше. Проверь ход выполнения: после завершения помощника управление возвращается к команде, следующей за вызовом.
Не проверяют порядок команд внутри вспомогательного алгоритма. Поскольку все его команды выполняются при каждом вызове, даже одна ошибка в последовательности повлияет на результат каждого запуска. Пройди блок по порядку и убедись, что он выполняет именно ту часть задачи, ради которой создан.
Для работы со вспомогательными алгоритмами нужно знать, что алгоритм состоит из команд, выполняемых в определённом порядке, и уметь читать линейные алгоритмы. Эти знания помогают проследить передачу управления от основного алгоритма к помощнику и обратно. Позже такое разбиение пригодится при изучении исполнителей и программирования. В программах отдельные блоки команд называют подпрограммами, а выделение частей помогает решать более сложные задачи.
Зачем делить алгоритм на основной и вспомогательные?
Так легче увидеть общий порядок решения и отдельно описать повторяющиеся или самостоятельные действия. Запись становится короче, а готовый фрагмент можно использовать несколько раз.
Может ли вспомогательный алгоритм вызываться несколько раз?
Да, если в задаче нужно неоднократно выполнить описанную в нём последовательность команд. Например, алгоритм приготовления одной порции можно вызвать для каждой порции.
Что происходит после выполнения вызванного алгоритма?
Выполнение возвращается к основному алгоритму. Он продолжает работу с команды, следующей за вызовом.
Можно ли использовать несколько вспомогательных алгоритмов в одной задаче?
Да. Если задача состоит из нескольких самостоятельных частей, для каждой можно создать свой вспомогательный алгоритм, а основной задаст порядок их вызова.
Как понять, какие команды стоит выделить во вспомогательный алгоритм?
Ищи повторяющуюся последовательность действий или этап, который можно описать отдельно и выполнить независимо от остальных. Проверь, можно ли дать этому фрагменту точное имя и понятно объяснить, что он делает.
8.4. Вспомогательные алгоритмы