Процедуры типа Function (Функция) вызываются по имени из любой процедуры типа Subили из других процедур типа Function.
Процедуры Functionв этом отношении не отличаются от встроенных функций Visual Basic, но разрабатываются пользователем; они могут содержать аргументы, через которые получают входные значения.
Процедуры типа Sub (Подпрограмма) вызываются по имени из других процедур, они могут содержать аргументы, получать входные значения, выполнять определенные действия.
Использование процедур уменьшает объем программы, улучшает ее структурированность. Облегчается отладка программ, так как работу каждой процедуры можно проверить по отдельности. По сути, процедуры – это новые операторы или операции языка, определенные программистом.
8.1.1. Создание процедур-функций типа Function
Для создания процедуры функции Function (рис. 8.1) необходимо выбрать пункт меню Insert (Вставка) → Procedure (Процедура).
Процедура Functionпредставляет собой группу операторов, содержащихся между операторами Functionи EndFunctionв стандартном модуле. Как и стандартные функции, процедура Functionявляется частью выражения и всегда записывается в правой частиоператора присваивания.
Синтаксис процедуры-функции Function:
Function имя_функции ([список формальных параметров]) [As Type]
Телофункции (строки кода)
End Function
|
Каждая функция-процедураначинается ключевым словом Function, за которым следует имя функции, а затем – список ее аргументов, заключенных в круглые скобки, который является необязательным. Type – любой тип возвращаемого значения функции. В теле функции последней исполняемой командой является функция присваивания: Имя функции = Возвращаемое значение. В результате ее выполнения имени функции присваивается значение выражения соответствующего типа, которое и возвращает функция.
Объявление функции заканчивается ключевыми словами EndFunction.
П р и м е р 1. При вычислении выражения
необходимо три раза найти квадратный
корень от различных аргументов.
В общем виде корень можно записать, как и
далее определить функцию:
.
Тогда .
Текст программы:
Option Explicit
Sub PR1()
Dim w As Single, x As Single, y As Single, z As Single
x = Val(InputBox(" x="))
y = Val(InputBox(" y="))
z = Val(InputBox(" z="))
w = Fsqr(x, y) + Fsqr(y, z) + Fsqr(z, x)
MsgBox (" w=" & w)
Процедура пользователя запишется следующим образом:
Function Fsqr(a, b) As Single
Fsqr = Sqr(a ^ 2 + b ^ 2 + Sin(a * b))
В процедуре Function Fsqr() a и bявляются формальными параметрами.
При обращении к процедуре Fsqr()
в подпрограмме Sub PR1() переменные
x, y, z
являются фактическими параметрами, совпадающими с формальными
параметрами a и b по типу, количеству, порядку следования.
8.1.2. Создание процедуры-подпрограммы Sub
Синтаксис процедуры-подпрограммы Sub:
Sub Имя_процедуры ([аргументы])
операторы процедуры
End Sub
При вызове процедуры количество и тип аргументов, передаваемых в процедуру Sub, должны соответствовать количеству и типу аргументов, указанных в объявлении процедуры. Если переданные в процедуру Subзначения переменных будут изменены в ходе выполнения процедуры, то измененные значения возвращаются в программу. По умолчании процедуры типа Sub, объявленные в стандартном модуле, являются общедоступными, поэтому они могут быть вызваны из любой процедуры.
Для того чтобы вызвать процедуру типа Sub, необходимо использовать
оператор, представляющий собой имя вызываемой процедуры, указав список требуемых аргументов. Передача переменной процедуре Sub называется передачей
аргумента по ссылке (по умолчании), поскольку переменная может быть модифицирована
в ходе выполнения процедуры и уже измененной возвращена
в программу.
Любую переменную можно передать по значению, если для этого в
списке аргументов при объявлении процедуры использовать ключевое слово ByVal. Применение ключевого
слова ByVal перед описанием переменной
позволяет сохранить копию оригинала аргумента и вернуть ее неизменной по
окончании процедуры, даже если переменная была модифицирована в ходе выполнения
процедуры.
Такое объявление аргументов в процедуре обеспечивает большую гибкость
в программировании, так как переданную с параметром
ByVal переменную можно
модифицировать в процедуре, а в программе она останется неизменной.
Параметры, передающиеся по ссылке, – это параметры, значения которых вычисляются в подпрограмме и передаются из нее в другие подпрограммы. Перед таким параметром ставится ключевое слово ByRef.
П р и м е р 2. Вычислить: ,
где s1 и k1 – сумма и количество нечетных чисел в диапазоне от 10 до 79;
s2 и k2 – сумма и количество нечетных чисел в диапазоне от –5 до –38.
Программный код
Основная подпрограмма: |
|
Option Explicit |
|
Sub PR2() |
|
Dim s1 As Single, s2 As Single, k1 As Single, k2 As Single Dim s As Single, n As Integer, m As Integer, k As Integer Dim f As Single, l As Integer |
|
n = Val(InputBox(“n=”)) |
‘Начало диапазона |
m = Val(InputBox(«m=»)) |
‘Конец диапазона |
l = Val(InputBox(«l=»)) |
‘Шаг изменения |
Call pg (n, m, l, s, k) |
‘Обращение к подпрограмме с входными фактическими параметрами: n – начало диапазона, m – конец диапазона, l – шаг изменения; параметры, передаваемые из подпрограммы pg: s – сумма нечетных чисел в диапазоне, k – количество нечетных чисел в диапазоне. |
s1 = s: k1 = k |
‘Сохранение результатов работы подпрограммы pg(значений s и k) |
n = – 5: m = – 38: l = –1 |
‘Ввод шага и нового диапазона. |
Call pg (n, m, l, s, k) |
‘Обращение к подпрограмме с новыми данными. |
s2 = s: k2 = k |
‘Сохранение результатов работы подпрог-раммы pg(значений s и k). |
f = s1 * s2 / (k2 – k1) + 35.6 |
‘Расчет окончательного значения. |
MsgBox (“f=” & f) |
|
End Sub |
|
Вызываемая подпрограмма: |
|
Sub pg (ByVal n1 As Integer, ByVal m1 As Integer, ByVal l1 As Integer, ByRef ss As Single, ByRef kk As Integer) ‘n1, m1, l1 – формальныепарамет- ры, передающиеся по значению; ss, kk – параметры, передающиеся по ссылке |
|
Dim I As Integer ss = 0 : kk = 0 For I = n1 To m1 Step l1 If I Mod 2 <> 0 Then ss = ss + I: kk = kk + 1 Next i End Sub |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.