Програмирование на Visual Basic
Рефераты >> Кибернетика >> Програмирование на Visual Basic

'результата. 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 символов). Записи бывают фиксированной или переменной длины. По способу доступа к записям файлы подразделяются на файлы последовательного и прямого доступа. При последовательном доступе для доступа к какой-либо записи должны быть пройдены все предыдущие записи, при прямом можно напрямую перейти к нужной записи. Все внешние устройства позволяют использовать последовательный доступ к записям файла. Прямой доступ позволяют использовать только устройства прямого доступа (например, магнитные и оптические диски). В Visual Basic файлы подразделяются на:

  • последовательные (sequential), записи которых могут быть переменной длины;
  • прямого доступа (random access), записи которых могут быть только одинаковой длины;
  • двоичные (Ьупагу) файлы с произвольной группировкой байтов, что позволяет организовать гибкий доступ к данным.
3.7.1. Последовательные файлы Каждая запись последовательного файла представляет собой строку символов, в конце которой содержится символ <CR>, обозначающий переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающий переход на другую строку (line feed, ASCII-код равен 10). Последовательное действие этих двух символов обеспечивает переход к новой записи. После последней записи записывается признак конца файла (end of file), который может проверяться встроенной функцией EOF (возвращает значение True. если обнаружен конец файла, и False, в противном случае). Для получения доступа к файлу для операции ввода-вывода используется оператор открытия файла, синтаксис которого следующий Open имя_файла For {Append Input | Output} As #номер_фаила fLen = размер буфера памяти}


Страница: