Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Параметры-процедуры и параметры-функции

Параметры-константы.

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

При передаче параметров-переменных в подпрограмму передаются их адреса в порядке, объявленном в заголовке подпрограммы, поэтому подпрограмма может влиять на значения параметров и изменять их.

Параметры-переменные в заголовке подпрограммы записываются так же, как параметры-значения, но перед именем параметра записывается слово VAR.

Если параметров несколько, то действие слова VAR распространяется на переменные после этого слова до ближайшей точки с запятой.

Например: Ввести вектор А. Сформировать на его базе вектор В, каждый элемент которого равен элементу а[i] возведенному в степень i/10 и вывести его на печать.

Program Primer;

Uses Crt, printer;

Const max =100;

Type vector: array [1..max] of real;

Var

a, b:vector;

j,n:integer;

FUNCTION X_V_ST_Y(x,y:real):real;

BEGIN

X_V_ST_Y=exp(y*ln(x));

END;

FUNCTION ASK_YN:boolean;

Var

ch:char;

BEGIN

ASK_YN:=false;

Write(‘ (Y / N) ‘);

REPEAT ch:= read key;

until up case (ch) in [‘Y’, ‘N’];

if ((ch=’Y’) or (ch=’y’) then ASK_YN:= TRUE;

END;

 

FUNCTION ASK_PRINTER:boolean;

BEGIN

ASK_PRINTER:=False;

Write(‘Хотели бы вы вывести данные на принтер’);

If (ASK_YN=True) then ASK_PRINTER:=True;

END;

РROCEDURE WOD_VECT(Var v:vector; Var n:byte);

Var

i:byte;

BEGIN

CLRSCR;

Writeln (‘Введите значение n<100’);

Readln(n);

for i:=1 to n do

BEGIN

Write (‘Введите’, i:3, ‘-й элемент‘);

Readln(v[i]);

END;

END;

PROCEDURE OUT_VECT(V:vector;Var n:byte);

Var

i:byte;

file_out:txt;

BEGIN

if (ASK_PRINTER) then

Asiggn(file_out, ‘prn’0 else

Asiggn(fl - out, ‘can’);

for i:=1 to n do

BEGIN

if (i mod 10) =0 then

Writeln(fl -out, v[i]:8:5)

else Write (fl-out,v[i]:8:5)

END;

END;

BEGIN

WOD_VECTOR(A,N);

for j:=1 to n do

BEGIN

B[j]:=X_V_ST_Y(a[j]), j /10.0);

OUT_VECT(B,N);

END;

END.

Если в ПП надо передать переменную, которую ПП не должна изменять, то целесообразно передать переменную не как параметр-значение, а как параметр-константу. Это позволит не создавать в стеке копию параметра и несколько увеличить быстродействие программы. Такой параметр если он структурированного типа, передается своим адресом, но предусматривается защита от его изменения.

Параметр-константа указывается в заголовке ПП аналогично параметру-значению, но перед именем параметра записывается зарезервированное слово Const, действие которого распространяется до ближайшей точки с запятой. Тип параметра-константы любой за исключением файлового.

 

Параметр процедурного типа может быть передаваемым параметром. Этот параметр является параметром-значением, т.е. записывается без Var.

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

ПП должна компилироваться с ключом { $F+ }.

Например, программа, печатающая таблицы сложения и умножения двух целых чисел в разном диапазоне.

Program Primer;

Type

Func = function (x, y: integer): integer;

{ $F+ }

Function Add (x, y: integer): integer;

begin

Add:= x + y;

end;

Function Multiply (x, y: integer): integer;

begin

Multiply:= x * y;

end;

{ F$- }

Procedure PrintTable (a, b: integer; operation: Func);

Var

I, j: integer;

begin

for i:=1 to a do

begin

for j:=1 to b do

write(operation(i, j));

writeln;

end;

writeln;

end;

Begin

PrintTable (10, 10, Add);

PrintTable (10, 10, Multiply);

End.

Компилятор Турбо Паскаля автоматически выбирает адресацию к ПП. Если ПП находится в одном файле с основной программой, то она компилируется с «ближним» адресом входа и возврата, состоящем только из смещения в текущем сегменте.

Если ПП используется для переменных процедурного типа, то она компилируется с получением «дальнего» адреса. В этом случае компилятору нужно указать ключ { F$+ }.

 

<== предыдущая лекция | следующая лекция ==>
Параметры-значения | Исполнительная часть модуля
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 177; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.