Параметры - переменные.
Параметры - значения.
Самый простой способ передачи значений. При вызове процедуры формальный параметр принимает значение фактического (тип должен соответствовать).
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 вызвать из тела самой программы, то будет завершено выполнение самой программы.