для чего используется подпрограмма

Подпрограммы

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

4.1 Общие сведения о подпрограммах. Локальные и глобальные переменные

Для правильного определения области действия идентификаторов (переменных) необходимо придерживаться следующих правил:

4.2 Формальные и фактические параметры. Передача параметров в подпрограмму

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

Механизм передачи параметров обеспечивает обмен данных между формальными и фактическими параметрами, что позволяет выполнять подпрограмму с различными данными. Между фактическими параметрами в операторе вызова и формальными параметрами в заголовке подпрограммы устанавливается взаимно однозначное соответствие. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.

Формальные параметры процедуры можно разделить на два класса: параметры-значения и параметры-переменные.

При передаче данных через параметры-значения в подпрограмму передаются значения фактических параметров, и доступа к самим фактическим параметрам из подпрограммы нет. При передаче данных параметры-переменные заменяют 1 Реально в подпрограмму передаются адреса фактических параметров. формальные параметры, и, следовательно, в подпрограмме есть доступ к значениям фактических параметров. Любое изменение параметров-переменных в подпрограмме приводит к изменению соответствующих им формальных параметров. Следовательно, входные данные следует передавать через параметры-значения, для передачи изменяемых в результате работы подпрограммы данных следует использовать параметры-переменные.

От общетеоретических положений перейдём к практическому использованию подпрограмм при решении задач. Изучение подпрограмм начнем с процедур.

4.3 Процедуры

Описание процедуры имеет вид:

procedure name_1( r : real; i : integer; c : char );

Однотипные параметры могут быть перечислены через запятую:

procedure name_2( a, b : real; i, j, k : integer );

Список формальных параметров необязателен и может отсутствовать:

Если в заголовке процедуры будут применяться параметры-переменные, то перед ними необходимо указывать служебное слово var :

procedure name_4( x, y : real; var z : real );

Для обращения к процедуре необходимо использовать оператор вызова:

Фактические параметры в списке оператора вызова отделяются друг от друга запятой:

a : = 5. 3; k : = 2; s := ’ a ’;

Если в описании процедуры формальные параметры отсутствовали, то и при вызове их быть не должно:

Алгоритм решения этой задачи был подробно описан в задаче 3.3 (рис. 3.14). Однако там не была рассмотрена ситуация некорректного ввода значений коэффициентов. Например, если пользователь введёт для чего используется подпрограмма. Смотреть фото для чего используется подпрограмма. Смотреть картинку для чего используется подпрограмма. Картинка про для чего используется подпрограмма. Фото для чего используется подпрограмма, то уравнение из квадратного превратится в линейное. Алгоритм решения линейного уравнения тривиален: для чего используется подпрограмма. Смотреть фото для чего используется подпрограмма. Смотреть картинку для чего используется подпрограмма. Картинка про для чего используется подпрограмма. Фото для чего используется подпрограмма, при условии, что для чего используется подпрограмма. Смотреть фото для чего используется подпрограмма. Смотреть картинку для чего используется подпрограмма. Картинка про для чего используется подпрограмма. Фото для чего используется подпрограмма. Чтобы не усложнять уже составленный алгоритм решения квадратного уравнения, запишем его в виде подпрограммы-процедуры. Далее приведён фрагмент программы с комментариями:

Источник

Подпрограмма

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

Содержание

Назначение подпрограмм.

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

Механизм подпрограмм, их описание и вызов

В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма также имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.

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

В следующем примере на языке Паскаль подпрограмма subprog вызывается из основной программы трижды:

Результатом выполнения такой программы станет вывод строки «Hello» и трёх строк «Bye».

Некоторые языки программирования (например, Паскаль, Ада, Модула-2) допускают описание вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм. Такие вложенные подпрограммы могут использоваться только в той подпрограмме, в которой они описаны. В иных случаях (например, в языке Си) вложение подпрограмм не допускается. Никаких принципиальных преимуществ вложение подпрограмм не даёт, но может быть удобно для более логичной структуризации программы (если какая-то подпрограмма используется только в некоторой другой подпрограмме, логично поместить первую во вторую).

Параметры подпрограмм

Назначение параметров

Подпрограммы часто используются для многократного выполнения стереотипных действий над различными данными. Подпрограмма обычно имеет доступ к объектам данных, описанным в основной программе (по крайней мере, к некоторым из них), поэтому для того, чтобы передать в подпрограмму обрабатываемые данные, их достаточно присвоить, например, глобальным переменным. Но такой путь не особенно удобен и чреват ошибками.

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

В приведённом примере параметр Line подпрограммы subprog в каждом вызове получает различное значение, благодаря чему выводятся не одинаковые строки, а разные.

Формальные и фактические параметры

Способ передачи параметров в подпрограмму

Существует несколько способов передачи параметров в подпрограмму.

Язык программирования может предоставлять возможность передавать параметры в подпрограммы либо только по значению (так сделано в языке Си), либо по значению и по ссылке (это реализовано в Паскале, Аде, C++), либо по имени и значению (это реализовано в языках Алгол и Алгол 68). В последних двух случаях для различения способов передачи параметра используются отдельные синтаксическая конструкции (в Паскале это ключевое слово var при описании параметра). В действительности, если язык содержит понятие ссылки (указателя), то можно обойтись и без передачи параметра по ссылке (её всегда можно смоделировать, описав параметр типа «ссылка»), но эта возможность удобна, так как позволяет работать с формальным параметром-ссылкой без разыменования, а также повышает надёжность и безопасность программы.

На параметры, передаваемые по ссылке, накладываются естественные ограничения: фактический параметр, подставляемый на место такого параметра при вызове, обязан быть переменной (то есть иметь адрес), а в языках со строгой типизацией — ещё и иметь в точности такой же тип данных.

Виды подпрограмм

В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.

Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами. Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.

Источник

1. Что такое подпрограмма?

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

2. Какова суть подпрограммы?

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

3. Какова форма подпрограммы?

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

4. Какими преимуществами обладает подпрограмма?

5. Что такое процедура?

Процедура – это подпрограмма, которая выполняет некоторые действия, но не возвращает никакого значения.

6. Как объявляется процедура?

При объявлении процедуры необходимо задать имя процедуры и список формальных параметров, которые она будет получать. Эта часть объявления обычно называется заголовком процедуры. После заголовка следует блок, который выполняется при вызове процедуры. Эта часть объявления обычно называется телом процедуры.

7. Как выглядит заголовок процедуры?

8. Как выглядит вызов процедуры?

9. Что происходит при вызове процедуры?

При вызове процедуры управление передаётся из точки вызова в процедуру, при этом ей передаются указанные фактические параметры. Затем выполняется тело процедуры. По завершении выполнения процедуры управление передаётся обратно в точку вызова. Это означает, что после завершения работы процедуры выполняется оператор, следующий за вызовом процедуры.

10. Как передаются данные в процедуру и из процедуры?

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

11. Что такое формальные параметры?

Параметры, записанные в заголовке процедуры, называются формальными. Список формальных параметров – это список неких условных переменных. Он описывает данные, которые должны быть переданы в процедуру, в общем виде.

Список формальных параметров определяется количество, порядок и типы параметров, которые должны быть переданы в процедуру при вызове. Список формальных параметров представляет собой последовательность объявлений, разделённых точкой с запятой, заключённую в круглые скобки. Каждое объявление – это разделяемый запятыми список имён параметров, после которого следует двоеточие и тип. Кроме того, каждому объявлению может предшествовать одно из ключевых слов var, const или out.

12. Что такое фактические параметры?

Параметры, записанные в вызове процедуры, называются фактическими.

Список фактических параметров – это список вполне конкретных значений, которые реально передаются в процедуру и которые она обрабатывает. Формальные параметры – это, в общем-то, абстракция. Фактические параметры должны реально существовать, т.е. это должна быть объявленная и обычно проинициализированная переменная, константа или выражение.

Список фактических параметров представляет собой список выражений, разделённых запятыми. Значения этих выражений подставляются вместо формальных параметров последовательно, т.е. значение первого фактического параметра – вместо первого формального параметра, значение второго фактического параметра – вместо второго формального параметра и т.д.

13. Какая связь между формальными и фактическими параметрами?

Имена формальных и фактических параметров совпадать не должны.

14. Что такое параметры-константы?

Параметр-константа – это формальный параметр, объявленный с ключевым словом const. Тип соответствующего фактического параметра должен быть совместимым, в качестве фактического параметра может быть использовано выражение.

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

Параметры-константы структурных и строковых типов используются для оптимизации компилятором кода для передачи этих параметров, т.е. они могут передаваться и по ссылке – это решает компилятор. Параметры-константы базовых типов на эффективность передачи не влияют, они лишь говорят о характере использования такого параметра.

15. Что такое параметры-значения?

Параметр-значение – это формальный параметр, объявленный без использования ключевых слов. Тип соответствующего фактического параметра должен быть совместимым, в качестве фактического параметра может быть использовано выражение.

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

16. Что такое параметры-переменные?

Параметр-переменная – это формальный параметр, объявленный с ключевым словом var. Тип соответствующего фактического параметра должен быть идентичным, в качестве фактического параметра может быть использована только переменная.

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

17. Что такое выходные параметры?

Выходной параметр – это формальный параметр, объявленный с ключевым словом out. Тип соответствующего фактического параметра должен быть идентичным, в качестве фактического параметра может быть использована только переменная.

Выходные параметры, как и параметры-переменные, передаются в процедуру по ссылке. Отличие состоит в том, что выходные параметры рассматриваются именно как выходные, и значение переменной, являющейся фактическим параметром, игнорируется.

18. Примеры совместимых типов

Формальный параметрФактический параметр
realsingle
realinteger
doubleword
integerbyte
integer-100..100
byte0..20
byteshortint (но! отрицательные числа преобразуются в числа от 128 до 255)

19. Примеры выражений

ВыражениеОписание
xПеременная
15Целая константа
exp(x)Вызов функции
(a + b) * cАрифметическое выражение
not fЛогическое выражение
a[i]Индексное выражение

20. Примеры использования процедур

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

Источник

Для чего используется подпрограмма

Когда алгоритм решаемой задачи несложен, и размер программы невелик, то она обычно пишется как одно целое. То есть текст программы состоит только из основной части — главной программы (на языке С++ — это функция main() ). С ростом размера программы появляется необходимость разбивать решаемую задачу на подзадачи и оформлять их в виде отдельных частей (подпрограмм). В этом случае основная программа служит только для вызова этих подпрограмм.

Подпрограмма — это часть всей программы, оформленная особым образом. Как правило, в виде подпрограммы записывается какая-то логически завершённая часть программы. Активное использование подпрограмм при разработке программного обеспечения составляет основу модульного программирования.

Модульное программирование — такая технология программирования, когда алгоритм всей решаемой задачи разбивается на отдельные, логически завершенные части. Если эти части сложны для кодирования, то они снова разбиваются на более простые части. Этот процесс продолжается до тех пор, пока не получатся простые для программирования алгоритмы, предназначенные для реализации несложных действий. Основные принципы модульного программирования были сформулированы ещё в 60-х годах 20-го века.

Преимущества от использования подпрограмм :

Возможность создания достаточно больших программ (ограничение — порядка 50000 строк. Разработка программ практически неограниченного размера требует применения классов. Речь о них пойдёт дальше).

Достаточно просто повторно использовать ранее написанный код.

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

Сокращается срок разработки программы в целом за счёт повторного использования кода и благодаря возможности привлечения к программному проекту целой группы программистов.

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

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

Недостатки от применения подпрограмм :

Использование подпрограмм всегда уменьшает скорость работы программы. Это становится заметным, когда размер подпрограммы слишком мал, например, один-два оператора.

Размер исходного кода и исполняемого модуля не всегда, но часто возрастает при использовании подпрограмм.

Грамотное применение подпрограмм требует более высокой квалификации от программиста, чем работа без подпрограмм.

Виды подпрограмм

Существует две категории подпрограмм: процедуры и функции.

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

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

Традиционно подпрограмму оформляют в виде функции, если результатом работы является одиночный объект (число, символ, строка). Пример алгоритмов, которые удобно оформить функцией: вычисление значения определенного интеграла, нахождение минимального числа в массиве, подсчет количества пробелов в строке и т.д.

Если результатом работы подпрограммы является несколько объектов, или выходным данным является массив, то необходимо использовать процедуру, так как через имя подпрограммы можно вернуть только один простой объект (число, адрес, символ), а через список параметров — любое количество и одиночных и составных объектов. Возврат результата одновременно и через имя, и через список параметров плох, так как вводит пользователя подпрограммы в некоторое заблуждение относительно того, что может изменить подпрограмма.

Функции на языке С++

Рассмотрим каким образом применить свою функцию в программе на языке С++. Чтобы использовать в программе свою собственную функцию, необходимо выполнить три действия:

задать прототип функции;

вызвать функцию в необходимом месте, например, в функции main()

дать определение функции.

Разберёмся немного подробнее с тем, что мы перечислили.

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

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

совершенно законен, хотя вряд ли стоит так делать.

Определение функции состоит из её заголовка и тела, записанного в виде блока. Допустимо записывать определение функций в любой последовательности. Нельзя определять функцию внутри другой функции (С/С++ — это не Паскаль!).

Теперь на конкретном примере рассмотрим применение своей функции.

Возможный вариант программы:

using namespace std;

double fmax(double a, double b);

double a = 4, b = 3, max;

Формальные и фактические параметры

В работе с подпрограммами приходится иметь дело с двумя видами параметров: список фактических параметров и список формальных параметров.

Источник

Pascal. Процедуры и функции

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

Описываются подпрограммы между разделом описания переменных и началом тела основной программы. Так выглядит структура всей программы в Pascal:

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

После описания, подпрограммой можно пользоваться посредством ее имени. При этом управление из места вызова передается соответствующей подпрограмме.

для чего используется подпрограмма. Смотреть фото для чего используется подпрограмма. Смотреть картинку для чего используется подпрограмма. Картинка про для чего используется подпрограмма. Фото для чего используется подпрограмма

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

Также различают формальные и фактические параметры. Те, что используются при вызове процедуры или функции называются фактическими, а формальные описываются в заголовке подпрограммы, и принимают значения фактических параметров. Формальные параметры должны совпадать типом и количеством с фактическими.

Чтобы стало понятно, где находятся те или иные части подпрограмм, рассмотрим общую форму записи процедур и функций:

Процедура:

Вызов процедуры:
( );

Функция:

В Pascal, также как и во многих других языках программирования, переменные по отношению к программе делятся на локальные и глобальные. Те, которые объявляются в основной части, называются глобальными, а в процедуре или функции – локальными. Локальные переменные в отличие от глобальных могут использоваться лишь внутри подпрограммы, к которой они принадлежат.

Теперь более детально рассмотрим в отдельности каждый вид подпрограмм.

Пользовательские процедуры

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

Напишем пример программы, показывающей принцип работы простой процедуры.

Программа выводит сумму целых чисел заданного диапазона. Имя процедуры прописано после служебного слова, определяющего, что создана именно процедура. Далее идет заголовок, где первые две переменные – это формальные параметры, в которые передается значение от фактических k и n. Переменная rez возвращает результат и называется параметром-переменной (определяются после слова Var), а k и n – параметрами-значений. Локальная переменная – i, она описана сразу после заголовка процедуры. Вызывая, в основной части программы процедуру sum, в качестве передаваемых параметров мы указали три целочисленных переменных. Заметьте, что их количество соответствует числу формальных параметров. Порядок также важен, т. е. в переменную pk передается значение переменной k, в pn значение n и т. д.

В вышеизложенном примере было бы вполне уместным не использовать параметр-переменную rez, а определить ее локально. В этом состоит различие между процедурами и функциями в Pascal.

Пользовательские функции

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

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

В вызываемую часть результат работы функции должен быть возвращен посредством имени последней. Это предусматривает хотя бы одно присвоение ей значения.

Допустим необходимо вычислить наибольший общий делитель двух целых чисел. Результатом решения данной задачи будет одно число, поэтому мы воспользуемся именно функцией.

В конце описания функции, ее имени присваивается значение, которое впоследствии примет переменная nod. Как видите, в функцию из основной части передаются только два фактических параметра (m и n), что соответствует количеству формальных параметров. И если в заголовке процедуры после слова Var можно указать переменные, также относящиеся к числу формальных параметров, то в функции эта обязанность лежит на ее имени, принимающем после своей работы какое-то значение.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *