Нетипизированные параметры. Параметры процедурного типа

Нетипизированные параметры -это группа параметров, перед которыми стоит ключевое слово 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: