Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КИТ_лабораторные_VBA.doc
Скачиваний:
174
Добавлен:
11.05.2015
Размер:
3.07 Mб
Скачать

4.9 Функции

Функция, как и подпрограмма – это отдельная процедура, вызываемая из другой процедуры. Отличие функции от подпрограммы состоит в том, что в результате выполнения функции определяется значение одной переменной, в то время как подпрограмма может определять значения нескольких переменных. Имя переменной, определяемой в результате выполнения функции, должно совпадать с именем самой функции.

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

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

Пример 4.20 – Требуется разработать функцию для вычисления среднего значения заданного столбца в двумерном массиве.

Private m As Byte

Sub primer4_20()

Dim a() As Single, n As Byte, k As Byte

‘a – двумерный массив из m строк и n столбцов

… ‘Объявление и ввод массива (см. примеры, рассмотренные выше).

k = InputBox("Введите номер столбца, для которого требуется вычислить среднее ")

s = sred_stolb(a, k)

MsgBox ("Среднее по " & k & “-му столбцу равно ” & s)

End Sub

Function sred_stolb(massiv, nomer)

sum = 0

For i = 1 To m

sum = sum + massiv(i, nomer)

Next i

sred_stolb = sum / m

End Function

Здесь sred_stolb – функция. Она вызывается в операторе присваивания s = sred_stolb(a, k). Таким образом, переменные a и k (т.е. массив и номер столбца, по которому требуется вычислить среднее) являются входными параметрами функции sred_stolb. В самой функции sred_stolb значения этих переменных присваиваются переменным massiv и nomer соответственно (можно было использовать и любые другие имена переменных). Функция вычисляет среднее по столбцу с номером nomer. Результат присваивается переменной sred_stolb. Следует обратить внимание, что имя этой переменной обязательно должно совпадать с именем самой функции. По окончании выполнения функции sred_stolb происходит возврат в основную программу: выполняется оператор, где была вызвана функция, т.е. оператор s = sred_stolb(a, k). Таким образом, значение функции sred_stolb присваивается переменной s. Затем эта переменная выводится на экран оператором MsgBox.

Примечание – В данном примере, как и в примере 4.19, переменная m объявлена как переменная уровня модуля, чтобы ее можно было использовать во всем модуле (т.е. и в подпрограмме primer4_20, и в функции sred_stolb). Вместо такого объявления можно было передать эту переменную в функцию sred_stolb в качестве одного из параметров.

Пример 4.21 – Требуется разработать программу для решения следующей задачи: найти в двумерном массиве столбец с максимальным средним значением и поменять его местами с первым столбцом.

Для решения этой задачи средние значения по столбцам массива будут вычисляться с использованием функции, разработанной в примере 4.20. Столбец с максимальным средним значением будет определяться в основной программе. Чтобы поменять местами первый столбец массива и столбец с максимальным средним значением, воспользуемся процедурой, разработанной в примере 4.19.

Private m As Byte

Sub primer4_21()

Dim a() As Single, n As Byte

‘a – двумерный массив из m строк и n столбцов

… ‘Объявление и ввод массива.

max_sred = -10000

For j=1 To n

s = sred_stolb(a, j)

If s > max_sred Then

jmax = j

max_sred = s

End If

Next j

call obmen_stolbcov(a, 1, jmax)

MsgBox(“Измененный массив”)

For i = 1 To m

For j = 1 To n

MsgBox("a(" & i & "," & j & ") = " & a(i,j)) ‘Вывод измененного массива на экран

Next j

Next i

End Sub

Function sred_stolb(massiv, j)

… ‘См. пример 20.

End Function

Sub obmen_stolbcov(massiv, k1, k2)

… ‘См. пример 19.

End Sub

Здесь переменной max_sred сначала присваивается очень большое отрицательное число. Затем в этой переменной сохраняется максимальное из вычисленных средних значений по столбцам. С этой целью перебираются все столбцы, по каждому столбцу вычисляется среднее (с помощью функции sred_stolb), и оно сравнивается с текущим значением переменной max_sred. Если выполняется условие s > max_sred (т.е. найденное среднее превышает текущее значение переменной max_sred), то значение среднего сохраняется в переменной max_sred, а номер столбца, где найдено это среднее – в переменной jmax. В результате в переменной jmax сохраняется номер столбца с максимальным средним. В подпрограмме obmen_stolbcov столбцы с номерами 1 и jmax меняются местами.