КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |