Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vba.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Как вызвать процедуры из других программ?

1 Способ. Необходимо написать имя процедуры и без скобок через «,» указать фактические параметры, то есть конкретные значения или имена переменных, с которыми нужно сделать нужные вычисления.

2 Способ. Служебное слово CALL <имя> (<список фактических параметров>).

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

Пример:

Public SUAB-деление (a, b, z)

z=a/b

END SUB

…

x=20:x=10

деление х, у, t ’вызов процедуры деления (1 способ вызова)

’t=2

CALL деление (y, x, t) ’вызов прцедуры деления (2 способ вызова)

’t=0,5

Замечание: если формальных переменных нет, то вызов процедуры с использованием служебного слова CALL идет без круглых скобок.

Передача аргументов в подпрограммы(по ссылке и по значению). Способ1 -Передача по ссылке.

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

Пример:

z=20

деление 10, 20, z

’переменная z=0,5 ,то есть меняет свое значение после вызова подпрограммы деление.

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

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

Способ2.-Передача по значению.

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

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

Пример:

Private Sub_MAPT (Byval a,b, Byval c)

Переменные а,с будут передаваться по значению, в то время, как переменная b предается по ссылке.

Пример вызова:

MAPT x, y, z

'x и z - не меняют значения

'y - может меняться

Досрочный выход из процедуры осуществляется с помощью оператора: Exit Sub.

Рассматриваем пример уточнения корня уравнения с помощью метода половинного деления.

Пусть непрерывная функция (х) принимает на концах отрывка [а;b] значения разных знаков. Это означает, что на данном отрывке обязательно есть корень уравнения (х)=0.

Уточнить корень с нужной точностью - это значит, что

значения корня отличается от полученного на

величину, которая не превышает заданной точности.

Toch=10 =0.000001

x

а z b

Процедура половинное деление

Public Sub Polovina( Byval a, Byval b , Toch,x)

‘a - левая граница

‘b - Правая граница’

‘a.b- передаются по значению

‘Toch, Х- передаются по ссылке

‘Toch - точность приближения корня

‘Х - приближенное значение корня

If F(a)*F(b)>0 Then MsgBox "Проверте границы" : Exit Sub ‘выше записаны блоки 2, 9, 10

‘Цикл DO… LOOP блоки 3-6

DO

x=(a+b)/2

IF (x)*F(b) > 0 THEN b=x ELSE a=x

LOOP while (b-a)>toch

x-=(a+b)/2

END sub

Блок-схема

1

2 да

9

3

10

4 да

нет

11

5

да 6

7 нет

8

‘Вызов подпрограммы.

Polovina -15,20,0,001,x

Данная строка кода позволяет уточнить корень уравнения на отрезке [-15;20] с точностью до 0,001; значение корня содержит переменная Х. Если на отрезке [-15;20] функция сохраняет свой знак ( то есть на концах отрезка она принимает значения одинаковых знаков), мы получим сообщение: “проверьте границы”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]