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