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

1.3. Функции

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

Общий синтаксис функции:

[Public|Private|Friend] [Static] Function Имя[(Список_аргументов)] [As Тип]

[Инструкции]

[Имя = выражение]

[Exit Function]

[Инструкции]

[Имя = выражение]

End Function

Синтаксис функции содержит те же элементы, что и процедура. Инструкция Exit Function приводит к немедленному выходу из функции.

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

Имя = выражение,

где

  • Имя – имя функции,

  • выражение – любое выражение, возвращающее значение того же типа, что и функция.

Вызов функции реализуется в соответствии с синтаксисом:

Возвращаемое_значение = Имя_функции (Аргумент_1, …, Аргумент_к)

Например,

х1 = Func1(20, 30)

Здесь вызывается функция Func1, в нее передаются значения 20, 30. Возвращаемое значение присваивается переменной х1.

Пример. Вычислить значение функции f = x-y+-x+2y при x = 3, y = 5, определив функцию для расчета модуля числа.

Private Function Modul(a As Single) As Single

If a >= 0 Then Modul = a Else Modul = -a

End Function

Private Sub Command1_Click()

Dim x As Single, y As Single, f As Single

x = 3: y = 5

f = Modul(x - y) + Modul(-x + 2 * y)

Print f

End Sub

Пример. Функция, которая возвращает число .

Private Function pi() As Double

pi = Atn(1) * 4

End Function

Private Sub Command1_Click()

Print pi(), pi() / 2

End Sub

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

Пример. Вычислить значение функции z = min(a, 3b) · min(2a-b, 2b), где min(xy) есть минимальное из чисел x и y.

1-й способ. С использованием функции Min.

Private Function Min(x As Single, y As Single) As Single

If x < y Then Min = x Else Min = y

End Function

Private Sub Command1_Click()

Dim a As Single, b As Single, z As Single

a = InputBox("Введите a=")

b = InputBox("Введите b=")

z = Min(a, 3 * b) * Min(2 * a - b, 2 * b)

Print z

End Sub

2-й способ. С использованием процедуры Min.

Private Sub Min(x As Single, y As Single, m As Single)

If x < y Then m = x Else m = y

End Sub

Private Sub Command1_Click()

Dim a As Single, b As Single, c As Single, d As Single, z As Single

a = InputBox("Введите a=")

b = InputBox("Введите b=")

Call Min(a, 3 * b, c)

Call Min(2 * a - b, 2 * b, d)

z = c * d

Print z

End Sub

Пример. Найти периметр треугольника, заданного координатами своих вершин (Определить функцию для расчета длины отрезка по координатам его вершин).

Private Function Otrezok(x1 As Single, y1 As Single, x2 As Single, _

y2 As Single) As Single

Otrezok = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)

End Function

Private Sub Vvod(n As Integer, x As Single, y As Single)

x = InputBox("Введите абсциссу" & str(n) & "-й точки", "Ввод данных")

y = InputBox("Введите ординату" & str(n) & "-й точки", "Ввод данных")

End Sub

Private Sub cmdПериметр_Click()

Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single, _

x3 As Single, y3 As Single, Perimetr As Single

Call Vvod(1,x1,y1)

Call Vvod(2,x2,y2)

Call Vvod(3,x3,y3)

Perimetr = Otrezok(x1, y1, x2, y2) + Otrezok(x1, y1, x3, y3) _

+ Otrezok(x2, y2, x3, y3)

Print "Периметр треугольника ="; Perimetr

End Sub

Замечание. Даже делая простейшие функции, необходимо помнить некоторые правила. Первое, инструкция Exit Function приводит к немедленному выходу из функции и таких инструкций может быть сколько угодно, если это подразумевает логика тела функции. Второе, не допускается определения функции внутри другой функции или процедуры. Третье, для возврата значения имени функции должно быть что-то присвоено (в зависимости от ее типа), если имени ничего не присвоено, то она возвращает значение по умолчанию (числовая функция возвращает нулевое значение, строковая функция возвращает значение пустой строки (""), функция типа Variant возвращает значение Empty, а возвращающая ссылку на объект – значение Nothing).

Замечания

  1. Вызов процедуры не может применяться в качестве операнда выражения. Вызов функции может (но не обязан!) применяться в качестве операнда выражения (как и вызов любой встроенной функции).

  2. Процедуры и функции, не описанные явно с помощью ключевых слов Public или Private, по умолчанию являются Public. Если не используется ключевое слово Static, значения локальных переменных не сохраняются между вызовами.

  3. Для входа или выхода из процедуры нельзя использовать инструкции GoSub, GoTo или Return.

  4. В языке Visual Basic возможна реорганизация арифметических выражений для увеличения скорости их выполнения. Избегайте применения функции в арифметическом выражении, если эта функция изменяет значения переменных, используемых в этом же выражении.

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