|
Виды формальных параметров.
1)параметры –значеения(с авторской версии),(входные)
(A,B,C:<тип1>;E,P:<тип2>;…)
2)праметры-переменные (с авторской версии),(выходные)
(Var A,B,C:<тип>;…)
3)параметры-const(с версии 7.0)
(Const A,B,C:<ТИП1>;…)
В качестве типа используется любой простой тип,string,file.
Если тип структуризованный-указывается имя типа,а сам тип объявляется в основной программе.
4)Безтиповые параметры(с версии 5.0)
(Var A,B,C;…)
5)Открытые параметры-масивы(с версии 7.0)(для одномерных)
(Var A:array of <тип элементов>;…)
6)Открытые строки(с версии 7.0)
(Var S:openstring;…)
7)Процедурные и функциональные пар.(с версии 5.0)
Синтаксис описания процедур
-Процедура:Может иметь несколько выходных параметров.
Описание
{заголовок}
Procedure<имя процедуры>(<список входных и выходных формальных параметров>);
(раздел описаний локальных объектв)
<описания меток,констант,типов,переменных,процедур и функций>
{раздел операторов}
Begin
<операторы>
End;
Обращение к процедуре осуществляется с помощью оператора процедуры.
Размещаемого в разделе операторов и высказывающей программы:
<имя процедуры>(<список входных и выходных фактических параметров>);
Пример В массивах A(5.6) и B(3,8) найти сумму положительных элементов каждой строки.
Program P1;
Const m=8;n=5;
Type matr=array[1...n,1..m] of ral;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]);
Readin;
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
Writeln (‘Вектор результата’);
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.
Передача параметров-значений и параметров-переменных
Механизм передачи в процедуру параметров-переменных и параметров значений принципально отличаются.
1)Если формальный параметр –параметр-переменная,то соответствующий ему фактический параметр-тоже переменная.Память отводится только под фактический параметр и процедуре предоставляется право работать с ним.При передаче параметров-переменных перед выполнением процедуры устанавливается ссылка на переменную-фактический параметр;иначе говоря,в процедуру передается передается адрес фактического параметра.Все действия процедуры,таким образом,выполняется над фактическим параметром.Если значение фактического параметра меняется,то это измененное значение доступно в программе после завершения работы процедуры.
Поэтому выходные параметры процедуры необходими специфицировать как параметры-переменные.
Следствие.Как var можно описывать входные массивы-параметры с целью экономии памяти(чтобы они не копировались во временную память) и времени на копирование.
2)Если формальный параметр –параметр-значение,то соответствующий ему фактический параметр может быть:
Const,переменной или выражением и при этом память выделяется и под формальный и под фактический параметры.В момент вызова процедуры значение фактического параметра –значения пресылаются в ячейку для соответствующего формального(локальную переменну) и на этом связь обрывается.Дальше процедура работает с этоц переменой.Можно сказать,что параметр –значение локализируется в теле процедуры.По завершении выполнения процедуры значение этой переменной недостурно.Соответсвующий фактический параметр не меняется.
Обычно входные параметры процедуры делают параметрами-значениями.
Program PP;
Var x,y,z:real;
Procedure P(var a:real;b:real;);
Var z:real;
Begin z:=a;a:=b:b:=z;end;
Procedure Q(var a:real;b:real;);
Begin z:=a;a:=b;b:=z;end;
{основная вызывающая прграмма }
Begin
X:=1,1;y:=2,2;z:=3,3;
P(x,y);writeln(x,y,z);
X:=1,1;y:=2,2;z:=3,3;
Q(x,y);writeln(x,y,z);
End.
-Функция Вычисляет единственное значение.
Описание
{заголовок}
Function <имя функции>(<список входных формальных параметров>):<тип результата>;
{разднл описаний локальных объектов}
<описания меток,констант,типов,переменных,процедкр и функций>
{раздел операторов}
Begin
<операторы>
<имя функции>:=<значение>
End;
Здесь <тип результата>;;=<имя простого типа><имя указателя>
Обращение к функции осуществляется с помощью указателя функции используемого как операнд некоторого выражения.Вид указателя:
<указатель функции>;;=<имя функции>(<список фактических параметров>)
Function SPR(k,m:byte;Var P,Q:vek):Integer;
Var S:Integer; i:byte;
Begin
S:=0;
For i:=k to m do
S:=S+P[I]*Q[i];
SPR:=S;
End;
{Основная программа}
Begin
Wwod(x);
Wwod(x);
If SPR(1,15,X,Y)>0 Then u:=SPR(1,20.x.x)
Else u:=SPR(10,20,y,y);
Writeln(‘u:=’,u);
end.
Procedure P(var a,b:integer;);
Begin
If a <0 then a:=a+1;
b:=sqr(a);
End;
Procedure Q(a:integer;var b:integer;);
Begin
If a<0 then a:=a+1;
B:=sqr(a);
End;
A)m:=-1;P(m,n);n:=n+m;
B) m:=-1;Q(m,n);n:=n+m;
C) m:=1;P(m,n);n:=n+m;
D) m:=1;Q(m,n);n:=n+m;
Дата добавления: 2015-09-29; просмотров: 30 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Бесконтактные логические элементы. | | | Инструкция по входу в студенческую почту (используя Федерации). |