Подпрограммы
14 Подпрограммы. Их назначение. Типы подпрограмм в ЯП Паскаль и СС++
Подпрограммы служат для решения частной задачи основной программы, т.е. являются отдельным модулем для вычисления какого-либо параметра, который используется в основной программе.
Бывают подпрограммы-функции и подпрограммы-процедуры.
Функция – это подпрограмма, вычисляющая и возвращающая некоторое значение. Если в ходе выполнения программы требуется часто вычислять какое-либо выражение (например, факториал, сложную формулу и т.п.), то можно вставить в программу функцию, которая будет вычислять это выражение и вызывать её в основную программу каждый раз, когда требуется его вычислить.
Подпрограмма-функция имеет ту же структуру, что и основная программа, то есть может содержать разделы описания переменных, типов, констант и т.д. Кроме того, подпрограмма может иметь собственные процедуры и функции.
1 Описание функций
В заголовке функции определяется идентификатор функции, формальные параметры (если они имеются) и тип результата функции.
Формат функции:
Рекомендуемые материалы
function <идентификатор>[(<список формальных параметров>)]: <тип результата>;
Функция активизируется при ее вызове. При вызове функции указывается идентификатор функции и какие-либо параметры, необходимые для вычисления функции. Вызов функции может включаться в выражения в качестве операнда, т.е. одного из аргументов. Когда выражение вычисляется, функция выполняется и значением операнда становится значение, возвращаемое функцией.
Описание функции приводится в разделе описаний основной программы после раздела переменных var. В теле программы функция вызывается по её имени с фактическими параметрами для вычисления.
Пример 1 Вычислить у = (х2 + 5!).
(Факториал – это произведение натуральных чисел, напр., 5! = 1*2*3*4*5)
Оформим вычисление факториала как подпрограмму-функцию:
program funct1;
var x, y: real; // начало раздела описаний программы
F: integer;
function Factоrial (N:integer): integer; //описание
// функции Factоrial типа integer с параметром N типа integer
var i, N: integer;
begin
F:= 1;
for i:=2 to N do
F:=F*1;
Factorial:= F;
End function; // конец описания функции
begin // начало тела основной программы
x:=3.45;
y:=sqr(x – Factorial(5)); // Вызов функции Factоrial с аргументом N =5 как операнда
write ('y=', y);
end. // конец тела основной программы
Параметры, описанные внутри функции (i, N) называются локальными и действуют только внутри функции. Параметры, описанные в разделе описаний программы (х, у, F) называются глобальными и действуют в самой программе и во всех её подпрограммах – функциях и процедурах, поэтому глобальную переменную F в описании функции Factоrial объявлять не надо.
Процедура - это часть программы, предназначенная для решения задачи или подзадачи. Это последовательность операторов, вычисляющая одну или несколько функций или выполняющая другую задачу (рисование рамки таблицы, оформление экрана и т.п.). Перед использованием процедуру необходимо объявить.
Формат объявления процедуры:
sub <имя процедуры>[(<список формальных параметров>)];
end sub
Процедура активизируется с помощью оператора процедуры, в котором содержатся имя процедуры и необходимые параметры (если это необходимо). Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры. Отличие подпрограммы-процедуры от подпрограммы-функции только в том, что процедура вызывается в основную программу отдельной строкой, а не входит в состав вычисляемых выражений.
Пример Вычислить у = (х2 + 5!).
program vybor;
var y, X: real; // начало раздела описаний основной программы vybor
sub Factоrial (N:integer); // начало процедуры Factоrial
var i: integer;
begin
F:= 1;
for i:=2 to N do
F:=F*1;
Обратите внимание на лекцию "1 Основные направления компьютерной графики".
end sub; // конец процедуры Factоrial
begin // начало тела основной программы
Х:= 5.1; N:= 5;
Factоrial (N); // вызов процедуры с параметрoм N
y:= X + N;
end. // конец тела основной программы