Механизм передачи параметров
Как было показано в приведенных выше примерах программ с использованием процедур и функций, в заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название "формальные" эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен. Этот список указывается после имени подпрограммы и заключается в круглые скобки. В списке формальных параметров должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга - точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой. Между формальными и фактическими параметрами должно быть полное соответствие: • формальных и фактических параметров должно быть одинаковое количество • порядок следования фактических и формальных параметров должен быть один и тот же; • тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра. Параметры-значения. Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию), в списке формальных параметров они перечисляются через запятую с обязательным указанием их типов, как было, например, в выше приведенных примерах: procedure Abort(Msg: string); function Step(N: integer; X: real): real; Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются как начальные значения формальных параметров, т. е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр - простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной). В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отразится на соответствующих фактических параметрах-переменных, которые сохранят те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.
Пример программы с использованием передачи параметров по значению: program Pr1; var А,В: real; {Процедура вычисления квадратов двух чисел и вывода на экран их суммы} procedure Sum_Square(X, Y: real); {X,Y - формальные параметры} begin Х:=Х*Х; Y:=Y*Y; Writeln('Cyммa квадратов = ',X+Y); end; {Конец процедуры} begin {Начало основной программы} А:=1.5; В:=3.4; Sum_Square (А,В); {Вызов процедуры Sum_Square с передачей ей значений фактических параметров А и В} end. При вызове процедуры Sum_Square с фактическими параметрами А, В значения этих параметров (один раз) копируются в соответствующие формальные параметры X, Y, и дальнейшие преобразования формальных параметров X,Y внутри процедуры Sum_Square уже никак не влияют на значения переменных А, В. Параметры-переменные. Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после зарезервированного слова Var с обязательным указанием типа. Каждому формальному параметру, объявленному как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа, например:
procedure Example(var M,N: integer; var Y: real); Если формальный параметр определен как параметр-переменная, то при вызове процедуры ей передается сама переменная, а не ее копия, и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе. Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры-переменные. Пример программы, использующей параметры-переменные: program Sum_Sub_Square; var A,В: real; SumAB, SubAB: real; {Процедура с параметрами-переменными Sum, Sub} procedure Sum_Sub(X,Y: real; var Sum, Sub: real); begin Sum:=X*X+Y*Y; Sub:=X*X-Y*Y; end; {Конец процедуры} begin {Начало основной программы} А:=1.5; В:=3.4; Sum_Sub(A,B, SumAB,SubAB); {Вызов процедуры с передачей ей фактических параметров-значений А, В и параметров-переменных SumAB, SubAB} Writeln('Сумма квадратов чисел',А,' и ',В,'= ', SumAB); Writeln("Разность квадратов чисел',А,’и',В,'=', SubAB); end.
Читайте также: B) Процесс передачи за плату или на льготных условиях государственной, муниципальной, коммунальной собственности частным лицам или коллективам. Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|