Смекни!
smekni.com

Програмирование на Visual Basic (стр. 20 из 30)

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) - в этом обращении зада-но значение второго аргумента с использованием его имени.

Пример программы.

Поместим рассмотренную функцию для определения среднего значения элементов одномерного массива в раздел general (Ьормы и обращение к ней в процедуру обработки события щелчка мыши по форме (рис. 3.19). После запуска программы и щелчка мыши по форме распечатывается среднее значение суммы элементов массива Х (рис. 3.20).

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

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

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

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

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

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

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

Sub Att^ntio!-. ‘:3^;’. As Control;

Btn. i-‘onrl t.^ г.: ^ True

Bin.BackColor = Red

'костанта Red определена в файле CONSTANT.TXT End Sub

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

Attention Btn_Riqht

Для контроля соответствия передаваемых при обращении типов форм и элементов управления в Visual Basic есть специальный оператор

If TypeOf имя объекта Is тип объекта Then

где TypeOf и Is — ключевые слова, а последующий синтаксис и действие совпадают с рассмотренным выше условным оператором.

Чтобы проверить соответствие передаваемого в процедуру объекта, в ее текст можно включить оператор

Sub Attention (Btn As Control)

If TypeOf Btn Is OptionButton Then

Btn.Fontltaiic = True

Btn.BackColor = Red

End If End Sub

Пример программы.

Создадим процедуру для изменения свойств формы, аргументом которой является имя формы, и процедуры обработки событий Click для задания исходных свойств формы и KeyPress, в которой имеется обращение к процедуре Change (рис. 3.21)

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

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

3.7 ФАЙЛОВЫЙ ВВОД-ВЫВОД

Архитектура современных компьютеров предусматривает наличие оперативной и внешней памяти. В оперативной памяти находятся выполняемая в данный момент программа и обрабатываемые ею данные. После выполнения программы ее данные в оперативной памяти не сохраняются, так как используемые ячейки памяти выделяются для данных другой программы. Технически и программно обусловленные ограниченность объема

оперативной памяти и ее относительно высокая стоимость не позволяют применять ее для постоянного хранения больших объемов информации. Для этого используется внешняя память (магнитные ленты, жесткие и гибкие магнитные диски, лазерные диски), позволяющие хранить сотни мегабайт (1 Мбайт = 1048576 байт) и гигабайт (1 Гбаит = 1.073.741.824 байт) информации и стоимость которых относительно невелика.

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

Таким универсальным понятием является файл (набор данных), который используется для работы с внешними данными на любом носителе. Под файлом понимается совокупность данных. Файл состоит из записей. Запись состоит из логически связанных данных, которые передаются между оперативной и внешней памятью за одну операцию ввода-вывода (ввод — передача данных из внешней в оперативную память, вывод - передача данных из оперативной во внешнюю память).

Например, в качестве файла можно рассматривать и используемую ранее колоду перфокарт. Одна карта является одной записью (устройство ввода перфокарт считывает последовательно по одной карте и нельзя считать меньше, чем одну карту). Запись характеризуется длиной (рассмотренная перфокарта является записью фиксированной длины в SO байтов и на ней можно было разместить 80 символов). Записи бывают фиксированной или переменной длины.