Передача параметров по ссылке (имени) и по значению


Передача аргументов по ссылке

По умолчанию простые переменные, массивы, элементы массивов передаются в процедуру по ссылке. Это означает следующее:

· каждая переменная имеет адрес, по которому в памяти размещается ее значение;

· при вызове процедуры и передаче переменной по ссылке передается адрес переменной, который становится адресом соответствующего параметра;

· если процедура изменяет значение параметра, то одновременно изменяется и значение переданной переменной.

Например,

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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.006 сек.