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

В VB аргументы могут передаваться двумя способами: либо как ссылки (ByRef), либо как значения (ByVal).

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

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

Если некоторый параметр является одновременно входным и выходным, то его нужно передать как ссылку.

    1. Функции пользователя

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

Function Имя функции ([Список формальных параметров]) As Тип возвращаемого функцией значения

Описание локальных переменных

Операторы тела процедуры

End Function

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

В разделе операторов тела функции должен обязательно присутствовать, по крайней мере, один оператор вида:

Имя функции=Вычисленное значение,

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

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

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

Function Tangens(x)as double

Tangens=sin(x)/cos(x)

End Function

можно вызвать s=Tangens(1) или Print Tangens(5*x).

Пример. Вычислить число сочетаний из n по m :С=m!n!/(m+n)! (количество неупорядоченных множеств, содержащих m различных элементов, выбранных из n элементов заданного множества).

Функция для вычисления факториала

Function F(k As integer) As Long

Dim i As Integer

F=1

For i=1 To k

F=F*i

Next i

End Function

Использование функции

Dim c As Single

Dim n As Integer

Dim m As Integer

m=Val(InputBox(“Введите M”))

n=Val(InputBox(“Введите N”))

c=F(m)*F(n)/F(m+n)

Print “c=”;c

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

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

'Описание функции вычисления площади треугольника по формуле Геррона Private Function Sq(x,y,z) As Single

'Имя функции – Sq.

'Формальные параметры: входные x,y,z.

Dim p As Single

p=(x+y+z)/2 'Вычисление полупериметра

Sq=Sqr(p*(p-x)*(p-y)*(p-z)) 'Вычисление площади

End Function

Private Sub Command1_Click()

Dim a,b,c,d,e,f,s As Single

'Задание длин ребер четырехгранника}

a=Val(Text1.Text)

b=Val(Text2.Text)

c=Val(Text3.Text)

d=Val(Text4.Text)

e=Val(Text5.Text)

f=Val(Text6.Text)

'Обращение к функции Sq для вычисления площади каждой грани

'с перечислением фактических параметров и вычисление площади поверхности

'четырехгранника

s=Sq(a,b,c)+Sq(c,d,e)+Sq(b,e,f)+Sq(a,f,d)

Text7.Text=Str(s)

End Sub