Нетипизированные параметры -это группа параметров, перед которыми стоит ключевое слово Var и за которым не следует тип. Фактическими параметрами в операторе вызова процедуры в данном случае могут быть переменные любого типа.
Поскольку у нетипизированных параметрах тип отсутствует, то изначально они совместимы с переменными всех типов.
Обеспечение совместимости с фактическими параметрами может быть достигнуто двумя способами.
Способ 1: внутри процедуры объявляется локальная переменная нужного типа, наложенная на переданный фактический параметр. Для описания такой переменной используется зарезервированное слово Absolute.
Пример 1.
program Primer1;
Var {Обьявление глобальных переменных}
x1,x2,y1,y2,z1,z2: real;
{процедура возведения в степень}
procedure stepen (x,y: real; var s); {x, y – параметры значения}
var ss: real absolute s; {s- параметр без типа, ss наложенная на s – локальная переменная типа real}
begin
ss:=exp(y*ln(x));
end; {конец процедуры stepen}
begin {основная программа}
writeln(‘Введите значение переменных в последовательности: x1 y1 x2 y2’);
readln (x1, y1, x2, y2); {Чтение исходных данных}
stepen (x1, y1, z1); {Первый оператор вызова процедуры stepen}
stepen(x2, y2, z2); {Второй оператор вызова процедуры stepen}
z1:= z2+z1; {Формироваие результата}
writeln(z1); {печать результата}
end.
Способ 2: внутри процедуры вводится нужный тип. Данный тип ставится в соответствие нетипизированному параметру с помощью присваивания типа переменной.
Пример 2. В программе функция Sum выдает сумму двух вещественных переменных при N=Ø, и сумму двух одномерных массивов при N<>Ø.
program Primer2;
var
ind: integer;
m1,m2: array [1..5] of integer; {описание массивов m1 m2}
x1,x2:real;
{функция вычисления суммы}
function sum(n: integer; var y1,y2): real;
Type
mas = array [1..MaxInt] of integer;
Var
i: integer;
s: real;
begin
if n=Ø then sum:= real(y1)+real(y2);
else
begin
s:=Ø;
for i:=1 to n do
s:= s + mas(y1)[i]+mas(y2)[i];
sum:=s;
end;
end; {конец функции sum}
Begin {основная программа}
for ind:= 1 to 5 do
real(m1[i], m2[i]); {заполнение массивов данными}
writeln(‘Введите 2 вещественных числа: ’)
read(x1,x2);
writeln(’x1 + x2’, sum(Ø,x1,x2)); {вызов в операторе writeln функции sum-для суммирования вещественных чисел x1 и x2 (n=0)}
writeln(’Массивы’, sum (5,m1, m2)); {вызов в операторе writeln функции sum-для суммирования массивов m1 и m2 (n=5<>0)}
end.