Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

End Function



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

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

Листинг 6.8. Программа с вычислением факториала

Private Sub ComniandButton1_Click ()

Dim bytN As Byte

Dim strInput

Dim intR As Integer

strlnput = InputBox(_ "Ввод факториала:", "Ввод")

bytN = CByte(strlnput)

intR = MsgBox(Fact(bytN),, "Вывод")

End Sub

Function Fact(bytA As Byte) As Integer

Dim bytl As Byte

Dim intFact As Integer

intFact = 1

For bytl = 1 To bytA

intFact = intFact * bytl

Next

Fact = intFact

End Function

В результате выполнения приведенного кода при нажатии на кнопку (объект CommandButton1, процедура обработки события CommandButton1_Click) пользователю будет предложено вве­сти число, для которого необходимо вычислить факториал. После ввода на экран выведется сообщение о полученном результате.

Следует отметить, что для объявляемой процедуры или функ­ции, так же, как и для переменной, может быть задана область ее видимости при помощи служебных слов Private или Public.

Основные отличия функции от процедуры:

1. Функция имеет тип (аналогично переменной) и может воз­вращать в программу значение, которое присваивается функции при помощи следующего оператора:

название функция = значение

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

Call процедура (параметры) или

процедура (параметры)

Если при вызове процедуры используется ключевое слово Call, то список ее параметров должен быть указан в скобках. Если же процедура вызывается без использования Call. то ее параметры перечисляются без скобок.

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

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

Листинг 6.9. Заполнение массива при помощи процедуры

Private arrA(1 То 5) As Integer

Option Explicit

Private Sub CommandButtonl_Click ()

Dim inti As Integer

Dim intR As Integer

Dim intMessage As Integer

Call InputArray

intR = 0

For inti = 1 To 5

intR = intR + arrA(intI)

Next

intR = intR / 5

intMessage = MsgBox(intR)

End Sub

Sub InputArray()

Dim strl

Dim intl As Integer

For intl = 1 To 5

strl = InputBox("Bвoд " & intl & " элемента:")

arrA(intI) = CInt(strI)

Next

End Sub

При запуске приведенной программы пользователю предлага­ется ввести поочередно 5 элементов массива аrrА. После этого вычисляется и выводится на экран среднее значение введенных элементов.

В данном примере у процедуры InputArray отсутствовали параметры, при этом массив, элементы которого вводились, был объявлен переменной уровня модуля (Private) в разделе Declarations. Такое описание было выполнено для того, чтобы в процедуре InputArray существовала возможность изменения его элементов. С другой стороны, если переменная описана в процедуре как локальная (Dim или Static), то дос­туп к ней из других процедур невозможен.

Параметры могут передаваться в процедуры или функции двумя способами:

1. Передача параметров по ссылке. Такие параметры еще называют параметрами-переменными. Данный режим в языке Visual Basic используется по умолчанию. При этом вызывае­мая процедура может изменить значения тех переменных, ко­торые ей передаются в качестве параметров.

2. Передача параметров по значению. Эти параметры носят также название параметров-значений. При вызове процедуры в таком режиме, значения переменных, которые используются в качестве параметров, не изменятся. Т. е. в этом случае изме­нениям будут подвержены только "копии" переменных, пере­даваемых в процедуру.

Ниже приведен пример программы с процедурами, пояс­няющий возможные способы передачи параметров.

Листинг 6.10. Передача параметров по ссылке и по значению

Private Sub CommandButtonl_Click()

Dim x, у

x = 3

у = 5

Call ByReference(x, у) ' Результат: x = 4, у = 6

x = 3

у = 5

Call ByValue(x, у) ' Результат: x = 4, у = 5

End Sub

' Передача параметров по ссылке

Sub ByReference(a, b)

а = а + 1

b =b + 1

End Sub

' Передача параметров по значению

Sub ByValue(a, ByVal b)

a = a + 1

b = b + 1

End Sub

Вызов процедуры ByReference приводит к тому, что зна­чения обеих переменных х и у, используемых в качестве пара­метров, увеличиваются на 1.

После вызова процедуры ByValue изменяется значение только переменнойх, в противоположность которой перемен­ная у остается без изменений. Использование при описании

параметра b служебного слова ByVal привело к тому, что в переменную у при выполнении процедуры ByValue не будет передано никакого значения.

Среди параметров процедуры или функции могут быть как обязательные, указание которых необходимо, так и необяза­тельные, которые при вызове можно не задавать. Объявление необязательных параметров при описании процедуры осуще­ствляется при помощи служебного слова Optional, указы­ваемого перед именем соответствующего параметра. При этом во всплывающей подсказке для процедуры он будет изобра­жаться в квадратных скобках (см. рис. 6.19).

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

Ниже приведен пример с использованием необязательных параметров при вызове процедур.

Листинг 6.11. Использование необязательных параметров

Private vntA As Byte, vntB As Byte

Option Explicit

Private Sub ConunandButtonI Click()

vntA =5

vntB = 10

Call Opt(vntA, vntB) ' Результат: vntA = 6, vntB =11

vntA = 5

vntB = 10

Call Opt(vntA) ' Результат: vntA = 6, vntB = 10

End Sub

Private Sub Opt(a As Byte, Optional b As Byte)

a = a + 1

If Not IsMissing(b) Then b = b + 1





Дата публикования: 2015-01-23; Прочитано: 221 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...