Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11 / тп / lections / 5_Protsedury_i_funktsii.doc
Скачиваний:
28
Добавлен:
19.05.2015
Размер:
57.34 Кб
Скачать

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

6

Соседние файлы в папке lections