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

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

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

Program <имя программы>; { Заголовок программы }
Uses <имя 1, имя 2, … >; { Раздел описания модулей }
Label <метка 1, метка 2,…>; { Раздел описания меток }
Const <имя 1, имя 2,…>; { Раздел описания констант }
Type { Раздел описания типов }
<имя типа 1> = <определение типа 1>;
<имя типа 2> = <определение типа 2>;

Var <имя 1, имя 2,…>: <тип>; { Раздел описания переменных }
Procedure; {Раздел описания процедур}
Function; {Раздел описания функций}
Begin { Тело программы }
<операторы>
End.

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

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

Snap 2013-04-17 at 20.56.59

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

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

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

Процедура:

Procedure <имя процедуры>(<формальные параметры>: <тип данных>);
Var
<локальные переменные>
Begin
. . .
End;

Вызов процедуры:
<имя процедуры>(<фактические параметры>);

Функция:

Function <имя функции>(<формальные параметры>: <тип данных>): <тип функции>;
Var
<локальные переменные>
Begin
. . .
<имя функции>:=<выражение>;
End;

Вызов функции:
<имя переменной>:=<имя функции>(<фактические параметры>);

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program proc;
uses crt;
var k, n, r: integer;
{начало описания процедуры}
procedure sum(pk, pn: integer; var rez: integer);
var i: integer;
begin
rez:=0;
for i:=pk to pn do
rez:=rez+i;
write(‘ сумма диапазона = ‘, rez:3);
end;
{конец описания процедуры}
begin
clrscr;
write(‘ начальное значение = ‘); readln(k);
write(‘ конечное значение = ‘); readln(n);
sum(k, n, r); {вызов процедуры}
end.

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

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

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

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

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

Function <имя функции>(<формальные параметры>: <тип данных>): <тип функции>;
Var
<локальные переменные>
Begin
. . .
<имя функции>:=<выражение>;
End;

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program func;
uses crt;
var
n, m, nod: integer;
{начало описания функции}
function nod_Evk(f_n, f_m: integer): integer;
begin
while n<>m do
begin
if m>n then m:=mn
else n:=nm;
end;
nod_Evk:=n;
end;
{конец описания функции}
begin
clrscr;
write(‘ N =: ‘); read(n);
write(‘ M =: ‘); read(m);
write(‘ Наибольший общий делитель ‘, n,‘ и ‘, m, ‘ = ‘);
nod:=nod_Evk(n, m);
write(nod);
end.

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

Рейтинг
( 2 оценки, среднее 5 из 5 )
Загрузка ...