Передача параметров по ссылке (имени) и по значению
Передача аргументов по ссылке
По умолчанию простые переменные, массивы, элементы массивов передаются в процедуру по ссылке. Это означает следующее:
· каждая переменная имеет адрес, по которому в памяти размещается ее значение;
· при вызове процедуры и передаче переменной по ссылке передается адрес переменной, который становится адресом соответствующего параметра;
· если процедура изменяет значение параметра, то одновременно изменяется и значение переданной переменной.
Например,
Dim A as integer, B as single A=5: B=8 CALL PROC1 (A,B) PRINT “A=”; A, ”B=”; B END SUB PROC1 (X, Y) X=Y+1: Y=X*2 END SUB |
Результат:
A=9 B=10
Передача аргументов по значению.
Это означает, что передается не адрес аргумента, а его значение. Все аргументы при вызове процедуры передаются по значению. Для передачи переменной в процедуру по значению ее превращают в выражение, заключая в скобки. В этом случае изменение значения параметра в процедуре не изменит значения соответствующей переменной.
Dim A as integer, B as single A=5: B=8 CALL PROC1 (A,(B)) PRINT “A=”; A, ”B=”; B END SUB PROC1 (X, Y) Y=Y*2: X=Y+1 END SUB |
Результат:
A=17 B=8
Пример 3. Оформить в виде процедуры алгоритм вычисления степени y=xn с натуральным показателем.
Решение. Схема алгоритма процедуры приведена на рис.18.
Рис. 18
Sub Stepеn (nasinteger, xassingle, y as single) Dim i as integer y=1 for i=1 to n y=y*x next i End Sub |
В заголовке процедуры после ее имени Stepen в круглых скобках перечислены формальные параметры n, x, определяющие исходные данные процедуры, и параметр y, обозначающий результат ее выполнения. Указан тип формальных параметров. Тело процедуры состоит из объявления локальной переменной i, доступной только внутри данной процедуры и операторов, реализующих алгоритм вычисления xn–значения переменной y.
Пример 4.Оформить в виде процедуры алгоритм сортировки одномерного массива B(n) по убыванию. Применить эту процедуру для упорядочивания элементов массива A(k).
Решение:
DEFInt i, k Input “k=”; k Dim A(1 TO k) AS single ‘Заполнение_массива_значениями Fori=1 tok InputA(i) Nexti ‘ вызов_процедуры_сортировки CALLSort(A( ) , (k) ) Fori=1 tok Print A(i); Next i END ‘Описание_процедуры Sub Sort( B( ) AS single, n AS integer) DEFInt j, l For j=1 TO n-1 For l=j+1 TO n IfB(j)<B(l) THENSwapB(j), B(l) ‘обменэлементовмассиваместами NEXT l NEXT j END SUB |
Дата добавления: 2016-05-31; просмотров: 1745;