Понятие процедуры и основные определения
По сути, или по смыслу использования, процедура есть средство абстракции, позволяющее именовать последовательность действий и при необходимости выполнения этой последовательности обращаться к ней по имени.
По форме процедура (или, что то же, описание, объявление процедуры) есть обобщенный алгоритм, записанный по специальным правилам и не выполняющийся самостоятельно. Процедура может быть вызвана для обработки различных данных, хотя алгоритм обработки один и тот же.
- Алгоритм, непосредственно обрабатывающий конкретные данные и содержащий обращение к процедуре, или вызов, называется вызывающим, или главным.
- Исходные данные, или аргументы, и выходные данные, или результаты процедуры, при описании процедуры могут быть представлены в специфическом виде - в виде параметров - как описание и перечисление "мест", куда при выполнении процедуры должны быть подставлены фактически обрабатываемые данные.
Параметры, присутствующие в описании процедуры, называются формальными.
Передаваемые процедуре при вызове объекты, каждый из которых должен соответствовать одному из формальных параметров по смыслу и типу, называются фактическими параметрами.
Внутренние объекты процедуры, т.е. определяемые внутри процедуры, называются локальными (аналог промежуточных данных). Это - "собственные" объекты процедуры, не связанные с вызывающим модулем и недоступные в нем. - Объекты, используемые в описании процедуры, но определенные вне процедуры (например, в другой процедуре или вызывающем модуле) и не входящие в список параметров, называются глобальными.
- Параметры процедуры и глобальные объекты определяют межмодульный интерфейс, т.е. совокупность данных, связывающих процедуру и вызывающий модуль и передаваемых из вызывающего модуля в процедуру и обратно.
- Выполнение процедуры происходит так, как если бы вместо формальных параметров при вызове были подставлены фактические, а затем выполнился бы алгоритм процедуры; таким образом, обрабатываются фактические параметры по алгоритму, записанному для формальных параметров.
- Поскольку при различных вызовах фактические параметры могут быть различными при одних и тех же формальных параметрах, имена формальных и фактических параметров не обязаны совпадать. Связь между ними устанавливается при наличии вызова процедуры.
Распределение памяти
Все глобальные переменные и типизированные константы размещаются в одном сегменте данных 65520 байт.
Локальные переменные размещаются в памяти динамически при активизации подпрограммы, их содержащей. После ее завершения память, отведенная под локальные переменные освобождается.
Синтаксис описания процедур
- Процедура.
Может иметь несколько выходных параметров.
Описание
{заголовок}
procedure <имя процедуры>(<список входных и выходных формальных параметров>);
{раздел описаний локальных объектов}
<описания меток, констант, типов, переменных, процедур и функций>
{раздел операторов}
begin
<операторы>
end;
Обращение к процедуре осуществляется с помощью оператора процедуры, размещаемого в разделе операторов вызывающей программы:
<имя процедуры> (<список входных и выходных фактических параметров>);
Виды формальных параметров:
- параметры-значения (с авторской версии),(входные)
(А,В,С: <тип1>; Е,Р: <тип2>;… ) - параметры-переменные (с авторской версии),(выходные)
(Var А,В,С: <тип1>; … ) - параметры-const (c версии 7.0)
(Const А,В,С: <тип1>; … )
В качестве типа используется любой простой тип, string, file.
Если тип структурированный- указывается имя типа, а сам тип объявляется в основной программе.
- Безтиповые параметры (c версии 5.0)
(Var А,В,С; … )
- Открытые параметры-массивы (c версии 7.0)(для одномерных)
(Var А: array of <тип элементов>; … )
- Открытые строки (c версии 7.0)
(Var S :openstring; … ) - Процедурные и функциональные пар. (c версии 5.0)
Пример. В массивах А(5,6) и В(3,8) найти сумму положительных
элементов каждой строки.
Program P1;
Const m=8; n=5;
Type matr= array [1..n, 1..m] of real;
vek=array [1..n] of real;
Var A,B: matr; VA,VB: vek;
Procedure wwod(Var C: matr; k,p: byte;);
Var i,j: byte;
Begin
Writeln(‘ Введите матрицу’);
For i:= 1 to k do
Begin
For j:= 1 to p do
Read (C[i,j]);
Readln;
end;
End;
Procedure Sum ( Var C: matr; k,p: byte; Var VC: Vek;);
Var i, j: byte; S: real;
Begin
For i:= 1 to k do
Begin
S:=0;
For j:= 1 to p do
If C[i , j]> 0 Then S:= S + C[i , j];
VC[i]:=S;
end;
End;
Procedure Wiw ( Var VC: vek; k: byte);
Var i: byte;
Begin
Write ( ‘ Вектор результата’);
For i:= 1 to k do Write ( VC[i] );
End;
{Основная или вызывающая программа}
Begin
wwod(A, 5, 6);
wwod(B, 3, 8);
Sum(A, 5, 6, VA);
Sum(B, 3, 8, VB);
Wiw(VA, 5);
Wiw(VB, 3);
End.