На Горох
Информатика, 9 класс

§ 5. Вспомогательные алгоритмы и подпрограммы

"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.

Объяснение темы В оглавлении: § 5. Вспомогательные алгоритмы и подпрограммы

Кратко о теме

Вспомогательный алгоритм выделяет часть решения, которую удобно выполнять отдельно или повторять. В программе такой алгоритм оформляют как именованную подпрограмму: сначала описывают её команды, затем вызывают по имени в нужном месте. Процедура выполняет действия, а параметры позволяют применять её к разным данным. Благодаря этому программа становится понятнее: повторяющиеся команды не приходится копировать, а отдельные части решения проще проверять и исправлять.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Вспомогательный алгоритм — отдельный алгоритм для повторяющейся или логически самостоятельной части задачи. Его выделяют, чтобы не дублировать одинаковые команды и не перегружать описание основного решения. Так легче увидеть, за что отвечает каждый фрагмент.

Подпрограмма — именованная часть программы, которую можно вызвать из других её частей. Она служит способом записать вспомогательный алгоритм в программе: вместо повторения команд используют одно имя. Подпрограмму можно применять в нескольких местах.

Процедура — подпрограмма, которая выполняет действия и вызывается по имени. В описании процедуры задают её имя и команды; при необходимости указывают параметры. Вызов процедуры записывают в нужном месте программы, чтобы запустить эти команды.

Параметр — обозначение данных, которые подпрограмма получает при вызове. В описании указывают формальные параметры, а при вызове передают фактические аргументы — конкретные значения или величины. Такое разделение позволяет одним алгоритмом обрабатывать разные данные.

Как это устроено

Большую задачу удобнее разделить на основную часть и вспомогательные алгоритмы. Основная часть задаёт общий порядок действий, а каждый вспомогательный алгоритм решает свою подзадачу. Такое разбиение помогает понять ход решения, потому что вместо длинного списка мелких команд видны отдельные этапы. Кроме того, самостоятельную часть проще проверить, не теряя из виду всю задачу.

Подпрограмму сначала описывают, а затем вызывают по имени в том месте, где нужны её действия. Это разделение нужно потому, что описание задаёт правила работы подпрограммы, но само по себе не запускает её. Вызов, наоборот, передаёт выполнение подпрограмме, после чего программа продолжает работу с места вызова. Одно описание можно использовать многократно, поэтому одинаковые команды не приходится переписывать.

Представим процедуру, которая выводит заголовок отчёта. Её команды достаточно записать один раз, а затем вызвать перед выводом каждого раздела. Если вид заголовка нужно изменить, правят описание процедуры, а не ищут все его копии. Так сокращается риск, что в разных местах программы окажутся разные варианты одного действия.

Параметры делают подпрограмму пригодной для разных исходных данных. Например, процедура вычисления площади квадрата может получить длину стороны a и вычислить S = a². Для квадрата со стороной 3 при вызове передают 3, а для квадрата со стороной 5 — 5. Алгоритм остаётся тем же, меняются только данные, с которыми он работает.

При вызове фактические аргументы сопоставляются формальным параметрам из описания. Поэтому количество аргументов и их порядок должны соответствовать параметрам: иначе подпрограмма может получить не те данные или вызов окажется некорректным. Проверять соответствие нужно по описанию, а не по догадке о том, какое значение «подходит».

Подпрограммы помогают находить ошибки, потому что отдельную часть решения можно проверять независимо. Если неверно вычислена площадь, проверяют соответствующую процедуру и передаваемые ей данные, не переписывая основную программу. Исправленную подпрограмму затем снова используют во всех местах вызова. При этом важно проверить и связь частей: правильная процедура не даст правильного результата, если ей передали неверные аргументы.

Основной алгоритм и вспомогательная подпрограмма

ПризнакОсновной алгоритмВспомогательная подпрограмма
НазначениеОрганизует решение задачи целикомВыполняет отдельную подзадачу
Как начинается выполнениеЗапускается как основная часть программыНачинает выполняться при вызове
Как связывается с другими частями решенияМожет вызывать подпрограммыСвязана с основной частью через вызов
Использование входных данныхПолучает данные задачи и организует их обработкуИспользует переданные аргументы, если предусмотрены параметры
Повторное использованиеОбычно задаёт ход одной задачиЕё можно вызывать в разных местах

Сравнивайте части по их роли, а не по длине: основной алгоритм управляет решением, подпрограмма выполняет порученную работу. Если действие повторяется, проверьте, можно ли оформить его отдельно и вызывать с нужными данными.

Разбор задач

Один заголовок выводится несколько раз

Условие. В нескольких местах программы нужно вывести одну и ту же строку-заголовок. Вместо копирования одинаковых команд выделим их в процедуру. Это удобно, если текст заголовка придётся менять: достаточно будет исправить одно описание.

  1. Определим повторяющийся фрагмент: команду вывода строки. Другие действия, которые не относятся к заголовку, в процедуру не включаем.
  2. Опишем процедуру, например с именем Заголовок, и поместим в неё команду вывода нужной строки. Параметр не нужен, если текст каждый раз одинаковый.
  3. В основной программе поставим вызов Заголовок в каждом месте, где должен появиться заголовок. Проверим, что вызовов столько, сколько требуется выводов.

Ответ. Одинаковый фрагмент записан в одной процедуре, а программа вызывает её в нужных местах. Копирования команд нет, поэтому при изменении строки достаточно поправить описание процедуры.

Площади квадратов с разными сторонами

Условие. Нужно вычислить площади нескольких квадратов с разными длинами сторон. Одинаково для каждого квадрата выполняется формула S = a², значит, отдельный алгоритм вычисления можно использовать многократно. Длина стороны будет меняться, поэтому её следует передавать как параметр.

  1. Выделим действие, которое повторяется: получить сторону квадрата и возвести её в квадрат. Обозначим формальный параметр стороны буквой a.
  2. Опишем подпрограмму Площадь, которая вычисляет a² и выдаёт или сохраняет результат. Важно, чтобы вычисление использовало именно значение, переданное через параметр.
  3. Для каждого квадрата вызовем Площадь с его стороной: например, сначала со значением 3, затем со значением 5. Вызовы используют одно описание, но получают разные аргументы.
  4. Проверим результаты: при стороне 3 площадь равна 9, а при стороне 5 — 25. Если значения перепутались, сверим порядок аргументов и параметров.

Ответ. Подпрограмма вычисляет площади 9 и 25, получая при вызовах стороны 3 и 5. Её алгоритм не приходится переписывать для каждого квадрата.

Несколько наборов данных

Условие. Для каждого из нескольких наборов данных нужно выполнить одинаковое вычисление и вывести результат. Конкретная формула зависит от задачи, поэтому обозначим набор входных значений x и вычисляемый результат y. Повторяющееся вычисление оформим отдельно, а ввод, перебор наборов и вывод оставим в основном алгоритме.

  1. Найдём границу подпрограммы: в неё войдут действия, которые одинаковы для каждого набора и получают результат y. Ввод очередного набора и организация повторения относятся к основной части.
  2. Опишем подпрограмму Вычислить с формальными параметрами для входных величин. Если результат нужно передать обратно, предусмотрим для него отдельный способ в выбранном языке программирования.
  3. В основной части последовательно получим очередной набор, вызовем Вычислить с соответствующими аргументами и выведем полученный результат. Повторим эти действия для всех наборов.
  4. Сопоставим параметры и аргументы по смыслу, количеству и порядку. Проверим один набор вручную и сравним ожидаемый результат с выводом программы.

Ответ. Основной алгоритм управляет обработкой наборов и выводом, а подпрограмма выполняет повторяющееся вычисление. Для каждого вызова передаются данные именно того набора, который обрабатывается в этот момент.

Типичные ошибки

Копировать команды вместо создания подпрограммы. Так поступают, когда повторяющийся фрагмент кажется коротким. При изменении алгоритма придётся исправлять все копии, и одну легко пропустить. Проверьте, встречаются ли одинаковые действия несколько раз; если да, рассмотрите общий вызов процедуры.

Вызвать подпрограмму до её описания или забыть вызов. Иногда описание принимают за команду запуска, хотя оно лишь задаёт команды подпрограммы. Если вызвать её не удалось или действия не выполнились, проверьте порядок описания и наличие вызова в основном алгоритме. Сверьте также имя подпрограммы в описании и вызове.

Перепутать формальный параметр с фактическим аргументом. Ошибка возникает, когда обозначение из описания принимают за конкретные данные. Чтобы проверить себя, найдите параметры в описании, а значения при конкретном вызове отметьте отдельно. Параметр задаёт, какие данные ожидаются, аргумент сообщает, что именно передано сейчас.

Передать неверное количество или порядок аргументов. При пропуске аргумента или перестановке значений подпрограмма может получить неподходящие данные. Обычно это происходит, когда вызов составляют, не сверяясь с описанием. Проверьте пары «параметр — аргумент» по порядку и убедитесь, что каждому параметру соответствует ровно один нужный аргумент.

Связь с другими темами

Для работы с подпрограммами нужно уметь составлять алгоритмы и программы, использовать величины и понимать последовательность выполнения команд. Без этого трудно определить, какую часть задачи выделить и какие данные передавать. При разбиении важно знать, откуда берутся входные величины и куда направляется результат.

Подпрограммы особенно полезны в больших задачах и программах с повторяющимися действиями. Разделение на самостоятельные части помогает распределить работу между участниками и проверять отдельные фрагменты. Позже тот же приём пригодится при разработке и сопровождении более сложных программ.

Что запомнить

  • Подпрограмма оформляет вспомогательный алгоритм как отдельную именованную часть программы.
  • Описание подпрограммы и её вызов — разные действия.
  • Вызов запускает выполнение команд подпрограммы.
  • Параметры позволяют применять один алгоритм к разным данным.
  • Формальные параметры указывают при описании подпрограммы.
  • Фактические аргументы передают при её вызове.
  • Количество и порядок аргументов должны соответствовать параметрам.

Частые вопросы по теме

Зачем выделять команды в подпрограмму, если их можно написать прямо в программе?

Если команды повторяются, подпрограмма избавляет от копирования и упрощает изменения: достаточно поправить её описание. Ещё её используют, чтобы отделить самостоятельную часть большой задачи и сделать основную программу понятнее.

Чем описание подпрограммы отличается от её вызова?

Описание задаёт имя подпрограммы, её параметры и команды. Вызов по имени запускает эти команды; одно только описание не означает, что подпрограмма выполнится.

Можно ли вызвать одну подпрограмму несколько раз?

Да, её можно вызывать в разных местах программы или несколько раз подряд. При каждом вызове она выполняет свои команды, а с параметрами может получать новые данные.

Зачем подпрограмме нужны параметры?

Параметры позволяют одной и той же подпрограмме работать с разными исходными данными. Например, вычисление площади квадрата можно описать один раз и передавать разные длины сторон.

Чем формальный параметр отличается от фактического аргумента?

Формальный параметр указан в описании подпрограммы и обозначает ожидаемые данные. Фактический аргумент — конкретное значение или величина, передаваемые при вызове.

Спросить по теме параграфа

§ 5. Вспомогательные алгоритмы и подпрограммы

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика", Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.