Процедура – это часть программы, которая не выполняется в естественном порядке, а вызывается специальным способом.
В различных языках программирования допускаются внешние и внутренние процедуры. Внешняя процедура не содержится внутри любой другой процедуры, может вызываться из произвольных мест программы и транслироваться отдельно, независимо от других фрагментов программы. Это дает возможность разбить решаемую задачу на логические, по возможности, слабо связанные между собой части и вести их разработку независимо разными людьми. Передача информации между процедурами осуществляется путем передачи аргументов из вызывающей процедуры в вызываемую. В вызываемой процедуре каждому аргументу в порядке их передачи соответствует параметр, тип и организация которого должны совпадать с типом и организацией аргумента. После передачи аргументов в теле процедуры выполняются задуманные действия и результат этих действий может быть передан обратно в место вызова с помощью того же механизма. Этот результат включается в список параметров вызываемой процедуры (следовательно и в список аргументов вызывающей). Иногда для описания этого механизма употребляют термины фактический параметр (вызывающая процедура) и формальный параметр (вызываемая). Внутренняя процедура содержится внутри некоторой другой процедуры и на ее употребление накладываются существенные ограничения. В языках Cи Basic допустимы только внешние процедуры.
По своей организации процедуры принято разделять на подпрограммы и функции.
Подпрограмма – это процедура, которая может возвращать произвольное число (от 0 до любого) параметров (результат выполнения) и для ее вызова применяется специальная инструкция.
C
Формально в языке нет понятия подпрограмма, опредено лишь понятие функция. Однако последняя легко преобразуется в подпрограмму и для ее вызова применяется инструкция вида:
<имя_процедуры>([список_аргументов]);
Пример. Подпрограмма умножения матриц.
MultMatrix(a, b, c, m, l, n);
Здесь:
a – левая матрица,
b – правая матрица,
c – матрица-результат,
m – число строк левой матрицы и результата,
i – число столбцов левой=числу строк правой,
n – число столбцов правой и результата.
Basic
Имеется 2 инструкции вызова:
call <имя_подпрограммы>([список_аргументов]) или
<имя_подпрограммы> [список_аргументов]
Пример. Подпрограмма умножения матриц.
call MultMatrix(a, b, c, m, l, n ) или MultMatrix a, b, c, m,l, n
Функция – это процедура, в которой выделяется один из возвращаемых объектов (основной результат выполнения). Он не включается в список параметров процедуры. Его значение присваивается имени функции. Таким образом, вызов функции может включаться в произвольное выражение и не требует специальной инструкции. Примером могут служить большинство встроенных функций языка.
Пример вызова.
Basic:y=sqr(x*x+z*z)+abs(x-z)
C: y=sqrt(x*x+z*z)+fabs(x-z);
В принципе любая функция может быть вызвана как подпрограмма, если в этом есть какой-либо смысл. Возвращаемое значение при этом не используется.
Пример. Функция printf(<управляющая_строка>[, <список_аргументов>);
<управляющая строка> является первым обязательным параметром.