5. Примеры
Пример 1.Вывод на экран двух куплетов песни и припева после каждого куплета:
Private Sub Command1_Click()
Print "kyplet 1"
Pripev
Print "kyplet 2"
Pripev
End Sub
Private Sub Pripev()
Print "Pripev"
EndSub
Пример 2.Написать процедуру вычисления площади круга.
Private Sub Command1_Click()
R= 5
SKr R, S
Print S 'результат:78,5
End Sub
Sub SKr(ByVal First As Single, ByRef Second As Single)
Second =3.14* First ^2;
End Sub
В данном примере переменная Sпередается процедуре SomeProcedure по ссылке. В самой процедуре эти переменныеRиSфигурируют под именами First и Second соответственно. Значение переменной Second изменяется и затем может быть использовано в процедуре Commandl_Click.
Таким образом, процедура может возвращать несколько значений. При вызове процедуры ей передаются аргументы, значения которых она может изменить. Если процедура не должна изменять аргументы, их следует передавать как значения.
Вывод. Процедуры в отличие от функций не имеют возвращаемого значения. Однако значения из процедуры можно возвращать с помощью аргументов, передаваемых как ссылки. В приведенном примере, аргумент R является входным (передается по значению), а S — выходным (передается по ссылке).
Пример 3. Функция вычисления факториала.
Public function factorial(a as integer) as long
Dim i As Integer
Dim f As long
f = 1
for i = 2 to a
f = i * f
Next i
factorial = f
end function
Пример 4.Среднегодовая температура за 1980-1987 годы хранится в массиве:
dim temp(1980 to 1990) as double
Написать функцию, определяющую самую высокую температуру за эти годы и самый жаркий год:
Public Function MaxTemp(ByRef t() As Double, ByRef god As Integer) As Double
'god должен быть возвращаемым значением, поэтому его нельзя передавать ' как ByVal
Dim i As Integer
maxTemp = t(LBound(t))
god = LBound(t)
For i = LBound(t) To UBound(t)
If maxTemp < t(i) Then
maxTemp = t(i)
god = i
End If
Next i
End Function
Private Sub Command1_Click()
Dim G(1980 To 1990) As Double
Dim t As Double
Dim god As Integer
G(1980) = 10.6: G(1981) = 11.2: G(1982) = 10.8: G(1983) = 11
G(1984) = 10.1: G(1985) = 13.2: G(1986) = 11.8: G(1987) = 10
t = MaxTemp(G, god)
Print god, t
End Sub
Результат 1985 13,2
Пример 5.Процедура, вычисляющая сумму элементов массива, имеет следующий вид:
Sub Sum(ByRef m() As Single, ByRef S As Single)
S=0
For i=LBound(m) To UBound(m)
S=S+m(i)
Next i
End Sub
Пример 6. Функция, вычисляющая сумму массива имеет вид:
Function Sum(ByRef m() As Single) As Single
Dim S As Single
S=0
For i=LBound(m) To UBound(m)
S=S+m(i)
Next i
Sum = S
End Function
Пример 7. Два способа вызова процедур. (Внимание: аргументы функции всегда в указываются в скобках; если у функции нет аргументов, ставят пустые скобки).
Private Sub Command1_Click()
FF 1, 2, 3
Call FF(1, 3, 2)
End Sub
Sub FF(a, b, c)
FFF = a ^ 4 + b ^ 2 + c ^ 3
Print FFF
End Sub
Пример 8. Применение именованных аргументов
Private Sub Command1_Click()
Print FF(b:=3, c:=2, a:=1) 'результат:18
Print FF(3, 2, 1) 'результат:86
End Sub
Function FF(a, b, c) As Double
FF = a ^ 4 + b ^ 2 + c ^ 3
End Function