скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Програмирование на Visual Basic

Для заданной процедуры или функции появляется шаблон (заготовка) в окне кода (первая п последняя строки программы), в который можно ввести текст программы.

Рис. 3 16

3.6.1.    Процедуры

Синтаксически процедура определяется [Private | Public] [Static] Sub имя процедуры [(список аргумен-

[операторы объявления] [операторы} [Exit Sub] [операторы} End Sub

Рис. 3.17

где Private, Public, Static, Sub, Exit Sub, End Sub - ключевые слова. Sub определяет обязательный первый оператор процедуры. End Sub - обязательный последний оператор процедуры;

имя процедуры образуется в соответствии с общими правилами образования имен, но не может иметь описателей типа (имя процедуры не принимает значения);

список аргументов имеет следующий синтаксис:

[Optional] [ By Val | ByRef] [ParainArray] имя [( )] [As тип] где Optional, ByVal, ByRef, ParaniArray и As ключевые слова;

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

Тип может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (только переменной длины). Variant, пользовательский тип или Control и Form. As тип необходимо применять для каждого аргумента.

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

Процедура не может быть определена внутри какой-либо процедуры или функции.

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

Sub SubDemo (RLen, Rwid) ' 'заголовок процедуры

‘SubDemo с двумя аргументами-

‘R1en-длина и Rwid-ширина

Dim Area 'объявление локальной переменной Area = RLen * Rwid ' расчет площади MsgBox “Площадь равна” & Area “печать результата End-Sub

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

Sub SubMatrVektor (A() As Single, B() As Single, .

MaxI As Integer, MaxJ As Integer)’ Dim J, I As Integer For J = 1 To MaxJ 'верхняя граница индекса J

'определяется передаваемым 'аргументом процедуры Л(J) = 0 'присвоение начального значения

'элемента вектора For I = 1 То MaxI 'верхняя граница индекса

'I определяется

Передаваемым аргументом процедуры А(J) = А(J) + B(I,J) 'вычисление суммы в цикле Next I Next J End Sub

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

Рассмотрим, что означают другие используемые ключевые слова в определении процедуры.

Exit Sub вызывает прекращение выполнения процедуры и пыход из нее в вызывающую программу.

Static определяет, что локальные данные (переменные, массивы), определенные внутри процедуры (переменная Area в примере), сохраняются в промежутках между вызовами данной процедуры. Определение Static не распространяется на данные, которые объявлены вне данной процедуры, но используются в ней (т.е. эти данные будут изменяться независимо от определения Static). Нельзя использовать при рекурсивном вызове процедуры.

Private определяет, что процедура может быть вызвана (доступна) только ц том модуле, в котором она объявлена (никакие другие процедуры в других модулях не могут вызвать данную процедуру). Определение Private не имеет смысла, если процедура определена для какой-либо формы (в этом случае процедура недоступна из вне данной формы).

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

Поскольку имя процедуры определяется (глобально распознается) в рамках всех процедур всех модулей одной программы, имя процедуры не должно совпадать с другими глобально распознаваемыми именами программы. Такими глобально распознаваемыми именами являются имена других процедур Visual Basic или процедур динамически подключаемых библиотек (dynamic-link library [DLL|) и данных, объявленных как Global (см. выше).

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

Optional определяет, что аргумент не является обязательным. При его использовании все последующие аргументы в списке аргументов также являются необязательными и для них также необходимо использовать данное ключевое слово. Аргументы, объявленные Optional, должны иметь тип Variant. He может использоваться для аргумента, для которого задан параметр ParamArray.

ByVal определяет, что аргумент передается в процедуру по значению (см. ниже).

ByRef определяет, что аргумент перелается в процедуру по ссылке (см. ниже).

ParamArray относится к последнему аргументу в списке аргументов и определяет, что конечный (заключительный) аргумент является необязательным массивом. Не может использоваться совместно с параметрами ByVal, ByRef, Optional.

Пример.

Sub ReturnTwice(ReturnValue, Optional A) If IsMissing(A) Then 'функция IsMissing ()

“проверяет передачу аргумента А в процедуру ReturnValue =Null 'если аргумент не передается,

'вычисляемое значение присваивается О Else ReturnValue = A * 2 'если аргумент передается,

'вычисляется значение от аргумента End If End Sub

Синтаксис оператора обращения к процедуре следующий:

имя процедуры[список значении} или

Call имя процедуры[{список значении)}

где Call — ключевое слово;

список значений список значений аргументов (соответствует списку аргументов в операторе Sub no количеству, порядку следования и типу, кроме случая когда используется параметр Optional).

Кроме того должно выполняться следующее соответствие между списками аргументов и значениями:

Аргумент Значение

Переменная | Константа, переменная,

I элемент массива, выражение.

Массив Массив

форма Форма

Элемент управления ; Элемент управления

I

Следующие примеры показывают правильное согласование между списками аргументов и значении:

Пример 1.

Sub Sum (A As Integer, B As Integer, С As Integer)

'список аргументов состоит из переменных С = А + В • End Sub Sub Form Click ()

Static X(3) As          Integer X(1) = 1 X(2) =2

Call Sum(X(l), X(1) + X(2), X(3))               'список

' -значений включает элементы массива             и выражение

Print Х(1), Х(2), Х(3) End Sub

Пример 2.

Sub Sum (A As Integer, В As Integer, С As Integer)

'список аргументов состоит из переменных С—А + В End Sub Sub Forrri_Click ()

Dim X, Z As Integer

X = 5

Call Sum(X, 4, Z) 'список значений включает

' переменные и константу Print X, Z End Sub

Пример 3.

Sub Sum (A ( ) As Integer)

'список аргументов включает массив

А(3) = А(1) + А(2) End Sub

Sub Form_Click () Static X(3) As Integer

X(1) - 1

X(2) =2

Sum X ( ,)'список значений включает массив

Print Х(1), Х(2), Х(3) End Sub

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

Для рассмотренного примера списка аргументов с использованием параметра Optional, обращения могут иметь следующий вид:

Call ReturnTwice(ReturnValue, )

'значение ReturnValue равно О

Call ReturnTwice(ReturnValue, 2)

‘ значение ReturnValue равно 4 Пример программы.

Поместим рассмотренную выше процедуру формирования вектора из сумм элементов столбцов матрицы в раздел general формы:

Option Explicit

Sub SubMatrVektor (A() As Single, B() As        Single, MaxI As Integer, Max.J As Integer) Dim J, I As Integer For J == 1 To MaxJ A(J) -- 0 For I = 1 To MaxI

A(J) = A(J) + B(I, J) Next I Next J End Sub

Private Sub Form_Ciick()

Static X(1 To 2, 1 To 3) As Single, Y(1 To 3) As Single

X(1, 1) = 1

X(1, 2) = 2

Х(1, 3) = 3

X(2, i) = 4

Х(2, 2} = 5

Х(2, 3) = 6

SubMatrVektor Y(), X(), 2, 3

Print Y(li, Y(2), Y(3) End Sub

Результат выводится на форму, показанную на оис.            3.18.

Рис. 3.1S

3.6.2.    Функции

Синтаксически функция определяется

[Public | Private] [Static] Function имя функции [(список аргументов)} [As тип]

[операторы объявления]

[операторы}

[имя функции = выражение]

[Exit Function] [операторы] [имя функции = выражение] End Function

где Public, Static, Private, Function , Exit Function , End Function —

ключевые слова. Function определяет обязательный первый оператор функции. End Function — обязательный последний оператор функции:

имя функции образуется в соответствии с общими правилами образования имен и может иметь описатель типа (As тип в конце первой строки относится к имени функции). Имя функции принимает значение и хотя бы один оператор

имя функции = выражение

может присутствовать внутри функции и выполняться при выходе из нее. Если никакое значение не присвоено имени функции, то имя функции принимает значение по умолчанию: числовая функция принимает значение 0, функция, объявленная как String, принимает значение пустой строки нулевой длины (“”), функция, объявленная как Variant принимает значение Empty (значение, которое принимает имя функции, называют возвращаемым значением функции — возвращаемое значение).

Список аргументов имеет следующий синтаксис:

[Optional] [ByVal|ByRef][ParamArray] имя[( )][As тип] [.[Optional] [By Val | ByRef][ParamArray] имя[( )] [As тип] ] ... где Optional, ByVal, ByRef, ParamArray и As ключевые слова;

имя — имя переменной, массива (в случае массива используется имя ( ) без указания границ значения индексов, что позволяет использовать одну функцию для разного числа элементов массива в каждом конкретном случае), элемента управления или формы (в последних дйух случаях тип принимает значения Control и Form).

Тип может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (только переменной длины). Variant, пользовательский тип или Control и Form. As тип необходимо применять для каждого аргумента.

Список аргументов определяет связь по данным между вызывающей (функция, из которой происходит вызов) и вызываемой (функция, которая вызывается) процедурами или функциями. Локальные данные, определенные внутри функции (кроме тех, что определены в списке general для форм), не могут использоваться в других процедурах и.'функциях (например, переменные с одинаковыми именами, но объявленные в разных функциях, хранятся в разных ячейках памяти и изменение переменной в одной из функций не ведет к изменению одноименной переменной и другой функции).

Exit Function вызывает прекращение выполнения функции ц выход из нее в вызывающую программу.

Функция не может быть определена внутри какой-либо процедуры или функции.

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

Function FunDemo (RLen, Rwid) As Single

'заголовок функции FunDemo с “двумя аргументами- Rlen-длина и Rwid-ширина

“тип имени функции определен как Single Dim Area ' объявление локальной

'переменной Area = RLen * Rwid ' расчет площади MsgBox “Площадь равна” & Area ' печать

'результата. FunDemo = Area 'имени функции

'присваивается вычисленное значение End Function

Пример функции для вычисления среднего значения элементов одномерного массива:

Function FunSumVecior (A( )} As Single,

MaxI As Integer) As Single

Dim SumVector As Single, I As Integer

Surn Vector = 0

For 1=1 To MaxI ' верхняя граница индекса 'I определяетсяпередаваемым аргументом процедуры

SumVector =SwnVector + A(I)

Next I

FunSuni Vector = SumVector/MaxI 'имени

'функции присваивается вычисленное значение End Function

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

Используемые ключевые слова аналогичны рассмотренным выше для процедур.

Приведем примеры заголовков функций с использованием параметров ParamArray и Optional:

Function (‘.ilcSur-i (ByVa;: FirstArg As Integer, par^Array OtnerArqri;;^

Function MyFunc.My^tr As String, Optional MyArgI, Opt--^1’”1”-‘1 MyArg2 )

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

имя функци11([список значений})

список значении - список значений аргументов (соответствует списку аргументов в операторе Function по количеству, порядку следования и типу. если не используется параметр Optional). Кроме того должно выполняться следующее соответствие между списками аргументов и значениями:

Пример 1.

Function Sum          (A As  Integer, B      As Integer)    As I n t e g e r

‘список аргументов состоит из переменных • С - А + В Sum = С Knd Function Sub Form_Click ; ) italic X(3) As Integer X<1) - 1 X(2) - 2 X(3) = Sum(X(l), X(1) - X(2))’список значений

‘ включает 'элементы мас,”'ЛЕ^а и выражение Print Х(1) , Х(2), Х(3) End Sub Пример 2. .

Function Sum          (A As  Integer/ В      As Integer)    ftg Integer

'список -аргументов состоит из переменных С = А + В Sum = С End Function Sub Forrn_Click () Dim X, Z As Integer X = 5 Z = Sum (X, 4)' список значений включает

' переменную и константу Print X, Z End Sub

  • Пример 3.

Function Sum (A ( ) As Integer) As Integer 'список аргументов включает массив

А(3) = А(1) + А(2)

SumА(3)

End Function

Sub Form_Click ()

Static X(3) As Integer

X(1) = 1

X(2) - 2

X.(3 ) = Sum (X() ,)'список значений 'включает массив

Print Х(1), Х(2) , Х(3)

End Sub

Для рассмотренных примеров заголовков функций с параметрами ParamArray и Optional обращения к функциям могут иметь следующий вид:

ReturnValue = CalcSum(4, 3 ,2 ,1) первый аргумент функции FirstArg принимает значение 4, остальные аргументы являются элементами массива и принимают значения OtherArgs(l) = 3, OtherArgs(2) = 2, последнее значение определяет размерность массива (1).

RetVal = MyFunc(“Hollo”, 2, “World”) - В этом обращении заданы все три значения аргумента.

. RetVal = MyFunc (“Test”, , 5) — в этом обращении не задано значение второго аргумента.

RetVal = MyFunc (МуАгд! :-- 7) - в этом обращении зада-но значение второго аргумента с использованием его имени.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.