Безтиповые параметры.

Параметры - переменные.

Параметры - значения.

Самый простой способ передачи значений. При вызове процедуры формальный параметр принимает значение фактического (тип должен соответствовать).

Procedure SumSquare (x, y :real);

Begin

X:=x*x;

Y:=y*y;

Writeln('Сумма квадратов= ', x+y);

End;

…..

var

a,b : real;

begin

a:=1.7; b:=0.9;

SumSquare (a, b);

….

При вызове этой процедуры с фактическими параметрами a и b значения этих параметров (один раз) копируются в соответствующие формальные параметры x, y и дальнейшие манипуляции с внутренними параметрами никак не влияют на a, b.

 

Этот способ предназначен для случаев, когда необходимо передать некоторое значение в точку вызова подпрограммы. Если в процедуре объявить в разделе var переменные, то они будут доступны только в этом блоке. Например:

Procedure Ex1 (x,y : real; Sum, Sub : real);

Begin

Sum:=x*x+y*y;

Sub := x*x - y*y;

End;

…….

Var

A,b :real;

SumAB, SubAB :real;

Begin

A:=1.7;

B:=0.9

Ex1(a,b, SumAB, SubAB);

…..

Sum и Sub - являются локальными и присвоения не будет. Исполним передачу параметров по ссылке.

Procedure SubSum (x,y:real; var Sum, Sub :real);

В этом случае формальные параметры Sum и Sub считаются синонимами соответствующих фактических параметров в пределах процедуры. Вызов аналогичен.

 

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

Var Ident;
где ident - идентификатор формального параметра.

Так как тип формального параметра не задан, то он несовместим ни с какой другой переменной, то есть не может входить ни в какие конструкции. Поэтому единственным способом использования таких параметров в теле подпрограммы является 'наделение' их определенным типом. Это можно добиться двумя основными способами: применив к ним операцию приведения типов или описав в подпрограмме локальную переменную определенного типа с совмещением ее в памяти с нетипизированным параметром.

function Equal (var x) : boolean;

begin

Equal :=(char(x)='A');

End;

procedure Equal (var x);

var

v1: byte absolute x;

begin

if size of (x)=sizeOf(byte) then v1…

end;

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

Turbo Pascal так же как и другие языки имеет дополнительное средство прерывания подпрограммы в произвольной точке. Для этого предназначена системная процедура Exit без параметров, которая немедленно завершает выполнение подпрограммы и возвращает управление в точку вызова.

Procedure p (x, y :real; var Res :real);

Begin

If x-y<0.1 then Exit;

Res:=(x*y)-y;

End;

Если процедуру exit вызвать из тела самой программы, то будет завершено выполнение самой программы.