Лекции по информатике - Подпрограммы и их параметры

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

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

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

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

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

Рассмотрим пример использование подпрограмм на Паскале (для упрощения программы не делается проверок на деление на 0):

function iDiv(a,b: real): real;
{Функция делит одно число на другое и
 возвращает результат}
begin
  iDiv:= a/b;
end;

var
  x,y : real;
begin
  readln(x,y);
  writeln(iDiv(x,y),' ',iDiv(x,-y));
end.

Для вызова функции iDiv мы просто вызвали ее в качестве параметра при обращении к встроенной процедуре WRITELN. Параметры X и Y в момент обращения к функции - это фактические параметры. Они подставляются вместо формальных параметров A и B в заголовке функции и затем над ними осуществляются нужные действия. Полученный результат присваивается идентификатору функции - именно он и будет возвращен как значение функции при выходе из нее. В программе функция iDiv вызывается дважды - сначала с параметрами X и Y, а затем Xи -Y, поэтому были получены 2 разных результата.

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

Слава Антонов © 2002 — August 13, 2008
Индекс цитирования
Hosted by uCoz