Если в программе возникает необходимость частого обращения к некоторой группе операторов, то рационально сгруппировать такую группу операторов в самостоятельный блок, к которому можно обращаться, указывая его имя. Такие разработанные программистом самостоятельные программные блоки называются подпрограммами пользователя.
При вызове подпрограммы определенной программистом, работа главной программы на некоторое время приостанавливается и начинает выполняться вызванная подпрограмма. Она обрабатывает данные, переданные ей из главной программы.
Передача данных из главной программы в подпрограмму и возврат результата осуществляются с помощью параметров. Параметром называется переменная, которой присваивается некоторое значение в рамках указанного применения. Различают формальные параметры - параметры, определенные в заголовке подпрограммы, и фактические параметры - выражения, задающие конкретные значения при обращении к подпрограмме. При обращении к подпрограмме ее формальные параметры замещаются фактическими параметрами, переданными из главной программы.
Процедуры
Процедура предназначена для выполнения какой-то законченной последовательности действий. Любая процедура начинается с заголовка. В отличие от основной программы наличие заголовка в процедуре обязательно. Он состоит из зарезервированного слова procedure, за которым следует идентификатор имени процедуры, а далее в круглых скобках - список формальных параметров. За заголовком могут идти такие же разделы, что и в основной программе. В отличии от основной программы процедура завершается не точкой, а точкой с запятой.
Procedure <имя>(<Формальные параметры>);
const...;
type...;
var...;
begin
< операторы >
end;
Пример. Необходимо ввести значения элементов целочисленных массивов A[1..10] и B[1..10], найти в массиве количество положительных и отрицательных элементов и результат вывести на экран.
Program Prim6_1;
Const Kol=10;
Type Vector = array[1..Kol] of integer;
Var
A,B : vector;
KolOtrA,KolPolA,KolOtrB,KolPolB,i : integer;
Procedure Summa(V:vector; Var Kp,Ko:integer);
var
k:integer;
begin
Kp:=0; Ko:=0;
For k:=1 to Kol do
if V[k]>0 then Kp:=Kp+1
else if V[k]<0 then Ko:=Ko+1;
end; {Конец процедуры}
begin
Write('Введите значения массива А:');
For i:=1 to Kol do Read(A[i]);
Write('Введите значения массива B:');
For i:=1 to Kol do Read(B[i]);
Summa(A,KolPolA,KolOtrA);
Summa(B,KolPolB,KolOtrB);
Writeln(KolOtrA,KolPolA,KolOtrB,KolPolB);
end.
Для вызова процедуры из основной программы следует написать оператор, состоящий из имени процедуры и списка фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами процедуры. Например, Summ (A,KolPolA,KolOtrA) означает, что вызывается процедура Summa для вычисления количества положительных и отрицательных элементов в массиве А.
Как видно из примера, параметры обеспечивают механизм замены, который позволяет выполнить процедуру с различными матрицами.
Если процедура возвращает в программу какие-то значения, соответствующие переменные должны быть описаны, как параметры переменные с использованием слова var.
Функции
Подпрограмма-функция предназначена для вычисления, какого либо параметра. У этой подпрограммы два основных отличия от процедуры.
Первое отличие функции в ее заголовке. Он состоит из слова function, за которым следует имя функции, далее заключенный в круглые скобки, необязательный список формальных параметров, а затем через двоеточие тип функции - тип возвращаемого значения. Тело функции представляет локальный блок, по структуре аналогичный программе:
function <имя>(<формальные параметры>):<тип результата>
const...;
type...;
var...;
begin
< операторы >
end;
Второе отличие заключается в том, что в теле функции хотя бы раз имени функции должно быть присвоено значение. В точку вызова функции возвращается результат последнего присваивания.
Обращение к функции осуществляется по имени с необязательным указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип.
Пример. Составить программу вычисления выражения Z=(X**5+X**-3)/2*X**M, в которой возведение в степень выполняется функцией Step.
Program Prim6_2;
var
M:integer;
X,Z,R : real;
Function Step(A:real;
D:integer):real;
var
i:integer;
Y:real;
begin
Y:=1;
For i:=1 to B do Y:=Y*A; { Цикл вычисления степени }
Step:;=Y; {Присвоение функции результата вычисления степени}
end;
begin
Write('Введите значения Х и М');
ReadLn(X,M);
Z=Step(X,5);
Z:=Z+Step(1/X,3);
if M=0 then R:=1
else if M>0 then R:=Step(X,M)
else
R:=Step(1/X,M);
Z:=Z/(2*R);
Writeln('Для Х=',X,'M=',M,'выражение = ',Z);
end.
Дата: 2019-05-28, просмотров: 171.