Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
425 Кб
Скачать
☆
    1. Вызов процедуры.

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

Синтаксис вызова процедуры имеет вид

Call <имя процедуры> [ аргументы.]

Либо

Имя процедуры аргументы без скобок

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

Пример

Процедура

Sub TestGame (New As String, Option As Integer)

MyAppId = Shell ( New, Option)

AppActivate MyAppId

End Sub

Вызов процедуры

Call TestGame (New, Option)

Либо TestGame New, Option ‘ во втором случае при вызове процедуры аргументы не заключаются в скобки

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

Передача аргументов

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

Если аргумент передается как ссылка, то вызванная процедура получает физический адрес памяти передаваемой информации. Различия между двумя способами передачи аргументов состоит в том, что при передаче аргумента как ссылки модно изменять значение этого аргумента. Для того . чтобы передать значение аргумента как ссылку, следует перед аргументом указать ключевое слово ByReff, а для того, чтобы передать аргументы как значения - ключевое слово ByVal. Возможно также использование именованных аргументов, которые передаются в последовательности , указанной в заголовке процедуры.

Пример

Private Sub Command _ Click ()

A = 5

Someprocedure A, B ‘ вызов процедуры

Print B ‘ результат 25

End Sub

Sub SomeProcedure (ByRef First, Ssecond)

Second = First * 5

End Sub

Пример 2

Private Sub Command _ Click ()

Someprocedure 1, 2, 3

End Sub

Sub SomeProcedure (aOne, aTwo, aThree)

Print aOne, aTwo? aThree

End Sub

Пример 3

Private Sub Command _ Click ()

Someprocedure aThree = 3, aTwo = 2, aOne = 1

End Sub

Sub SomeProcedure (aOne, aTwo, aThree)

Print aOne, aTwo, aThree

End Sub

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

Для определения динамического массива, как вам известно, достаточно в списке параметров оператора Sub привести имя массива, за которым следуют круглые скобки.

Например:

Sub ArraySort (InputArray ( ),ardim)

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

Рассмотрим пример такой процедуры для сортировки массива.

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

Public Sub ArraySort(Input Array ( ), ardim) ‘ ardim- количество элементов в массиве

For I = 1 to ardim

For J = 1 to ardim

If InputArray ( i ) > InputArray ( j ) Then

Temp = InputArray ( i )

InputArray ( i ) = InputArray ( j )

InputArray ( j ) = Temp

End If

Next j

Next i

End Sub

Dim ThisArray (1 To 10 )

For i = To 10

J = Int ( Rnd ( )* 25 + 1)

ThisArray ( i ) = Chr$ ( 64 + j )

Next i

For i = 1 To 10

Form1.Print ThisArray ( i ) ‘ вывод на печать исходного массива

Next i

ArraySort ThisArray, 10 ‘ 10 - число элементов в массиве

Form1.Print “ “

For i = 1 To 10

Form1. Print ThisArray ( i ) ‘ вывод на печать упорядоченного массива

Next i

Процедура ArraySort, как и все другие процедуры начинается с оператора Sub. В списке параметров процедуры указан массив и переменная, в которой будет записано количество элементов в массиве.

Код, составляющий тело процедуры, содержит вложенные операторы цикла For , предназначенные для проверки значения каждого элемента массива и помещения его в соответствующую позицию. После выполнения сортировки происходит возврат в основную программу.

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