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