Реферат: Програмирование на Visual Basic
В программе, состоящей из нескольких процедур или функций, необходимо остановиться на понятии локальные и глобальные данные.
Локальные данные определены только в момент выполнения процедуры или функции и память для них выделяется только на момент выполнения.
После завершения выполнения процедуры или функции локальные данные не сохраняются (выделенная память используется Другими процедурами и функциями). При этом экономится память, так как она выделяется только по мере необходимости и операционные системы современных компьютеров это делают очень эффективно. Однако и Visual Basic имеется и возможность сохранять локальные данные до следующего обращения (специальный параметр Static, см. ниже).
Глобальные данные сохраняются пока выполняется программа и они доступны для всех входящих в программу процедур и функции. При запуске программы Visual Basic отводит для глобальных данных необходимую память.
Повторный вьпов процедуры или функции внутри этой же процедуры пли функции (обращение к самой себе) называется рекурсией. Visual Basic допускает рекурсивное обращение.
Программный код процедур и функций, не являющихся процедурами обработки событии, помещается в раздел general списка Object формы (щелчок мыши по кнопке Wiew Code окна Project и далее щелчок мыши по элементу раскрывающегося списка general). Кроме того, в раскрывающемся меню Insert Главного меню имеется пункт Procedure (рис. 3.16). выбор которого раскрывает специальное окно для выбора процедуры или функции п задания имени (рис. 3.17).
Для заданной процедуры или функции появляется шаблон (заготовка) в окне кода (первая п последняя строки программы), в который можно ввести текст программы.
Рис. 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)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37