Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word (2).doc
Скачиваний:
13
Добавлен:
29.05.2015
Размер:
41.3 Кб
Скачать

3.2. Процедуры

Процедура — это обыкновенная подпрограмма, которая не возвращает никакого

значения под своим именем.

Описание процедуры также состоит из двух частей: заголовка и кода. Заголовок

процедуры имеет следующий вид:

[доступ] Sub имя_процедуры ([ByVal параметр1 Аs тип, ByVal параметр2 Аs тип, ..]),

где

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

процедуру.

. Параметры — являются необязательными и служат для передачи каких-либо

данных из основной программы в процедуру.

. Код процедуры содержит операторы и команды языка Basic. Код процедуры

может быть пустым.

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

круглые скобки.

Рассмотрим пример описания процедуры. Создадим процедуру, которая

складывает два первых параметра и получившуюся сумму умножает на третий

параметр. Для этого в процедуру потребуется передавать три параметра — первые

три целых числа для выполнения операций.

Sub MySub(ByVal al As Integer, ByVal a2 As Integer, ByVal a3 As Integer)

Dim a4 As Integer

a4 = (a1+a2)*a3

End Sub

Для вызова данной процедуры можно в любом месте основной программы

поступить следующим образом:

MySub(12, 4, 3)

В данном случае, будет выполнена процедура MySub, вычисляющая значение

(12+4)*3 равное 48. Это значение будет помещено в переменную A4, которая имеет

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

значение будет потеряно.

Создание подпрограмм при помощи пункта меню Инструменты .Добавить

процедуру

Открываем программный модуль, выбираем в главном меню Инструменты .Добавить

процедуру. Появляется диалоговое окно

В окне Name пишем имя программы, кнопками выбираем тип и область

видимость подпрограммы, тип переменных в ней и нажимаем кнопку OK. Попадаем

в программный модуль в область создаваемой подпрограммы.

Досрочное завершение функций и процедур

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

функции и передать управление основной программе, из которой производился

вызов данной процедуры или функции. В этом случае можно использовать

ключевые слова Exit Function и Exit Sub.

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

Приведем пример функции, которая делит одно число на другое. Если второе число

равно нулю, то вычисления производить не имеет смысла и нужно завершить

выполнение функции:

Function MyDiv(ByVal al As Integer, ByVal a2 As Integer) As Double

If a2 = 0 Then

Return 0 ' Возвращаем ноль, если деление на ноль

Else

Return a1/a2

End If

End Function

Если вызвать функцию следующим образом:

Dim MyRez As Double

MyRez = MyDiv(5,2),

то результат, записанный в переменную MyRez, будет равен 2,5. Если же

вызвать функцию с такими аргументами:

Dim MyRez As Double MyRez = MyDiv(5, 0),

то в переменной MyRez будет записано значение 0.

3.3. Параметры и аргументы

Аргументы — это элементы, которые указываются при вызове подпрограмм.

Они замешаются соответствующими параметрами подпрограммы.

Параметры — это элементы подпрограммы, которые используются при

описании кода подпрограммы.

В качестве параметров и аргументов могут выступать:

. значения;

. константы;

. переменные.

Параметрами могут быть элементы абсолютно любого типа.

В приведенном ниже примере параметрами являются a1, a2 и a3:

Sub MySub(ByVal al As Integer, ByVal a2 As Integer, ByVal a3 As Integer)

Dim a4 As Integer

a4 = (a1+a2)*a3

End Sub

При вызове данной процедуры мы используем, например, такую запись:

MySub(10, 2, 3).

При этом числа 10, 2 и 3 будут являться аргументами данной процедуры.

Параметры могут передаваться и «по значению». Если перед именем параметра

добавляется префикс ByRef, то параметр передается «по ссылке», функция или

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

переменной. При добавлении префикса ByRef параметр передается «по значению», VB

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

подпрограмме нельзя напрямую модифицировать значение.

3.4. Ключевые слова Public и Private

Использование Public перед объявлением имени подпрограммы делает ее доступной на

уровне всего проекта, говорят, обеспечивает глобальную область видимости. Private –

делает процедуру доступной только на уровне модуля, работать с ней могут лишь объекты,

находящиеся в тех же форме или модуле.

3.5. Ключевые слова Static

В определенных случаях используется в подпрограммах вместо оператора Dim,

например

Static n as Integer

Переменная, объявленная таким образом в подпрограмме, сохраняет свое значение

между двумя ее вызовами.

3.6. Понятие рекурсии

Рекурсия — это способ решения задачи путем сведения ее к более простым

задачам такого же типа.

Рекурсивная функция или процедура постоянно вызывает сама себя, постепенно

упрощая задачу, до тех пор, пока ее решение не станет простым.

Таким образом, общий алгоритм рекурсивного решения задачи выглядит так:

. если задача проста, то решаем ее. Иначе переходим на следующий шаг;

. упрощаем задачу, сведя ее к более простой.

Visual Basic позволяет применять рекурсивный вызов функций. Приведем

пример использования алгоритма рекурсии. Для этого напишем программу поиска

наибольшего общего делителя (НОД) двух целых чисел. Наибольший общий

делитель (НОД) двух целых чисел — это самое большое целое число, на которое

делятся без остатка оба данных числа. Например, НОД чисел 8 и 12 является число

4.

Для решения задачи нахождения НОД используем алгоритм Евклида:

. если х делится без остатка на у ((х Mod у) = 0), то НОД(х, у) = у. Иначе перейти

к следующему шагу;

. НОД(х, у) = НОД(у, (х Mod у)).

Примечание

Напомним, что функция Mod возвращает остаток от целочисленного деления. Остаток

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

Запишем данное решение на языке Basic.

Function NOD(ByVal x As Integer, ByVal у As Integer) As Integer

If (x Mod у) = 0 Then

Return у

Else

Return NOD(y, (x Mod y))

End If

End Function

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

Dim MyRez As Integer

MyRez = NOD(12, 8)

Рассмотрим, как работает наша рекурсивная функция nodq:

1) Проверяется, делится ли число x на у без остатка. Если это так, то

возвращается значение, равное числу у. Иначе переход на шаг 2.

2) Функция NOD() вызывается из самой себя с новыми параметрами: NOD(у,(x

Mod у)). Переходим на шаг 1.

Таким образом, функция NOD() будет вызывать себя столько раз, сколько

нужно, чтобы достичь конечного результата.

В нашем примере результат, равный 4, будет записан в переменную MyRez.

4. Вввод и вывод данных в VB

4.1. Работа с ASCII-файлами

Они содержат данные произвольного типа и могут форматироваться в виде

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

Информационные объекты часто выводятся в отдельных строках, но, вообще

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

такими файлами, поскольку это позволяет работать практически с любыми

данными. Например, вы сможете извлечь описание вашей системы из INI-файла.

Visual Basic представляет несколько возможностей для чтения сохраненных

данных. Более трудный (и в некоторых ситуациях неизбежный) вариант заключается

в жестком кодировании чтения/записи данных. В этом случае вам придется

создавать собственный файл — последовательный, с произвольным доступом, или

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

только для работы с данным файлом. Такой подход ограничивает использование

кода конкретным приложением, но иногда позволяет наиболее успешно справиться

с поставленной задачей.

Работа с файлом любого типа начинается с его открытия. В Visual Basic для

этого используется оператор Open, который открывает файл и готовит его к чтению

или записи. Минимальный набор параметров для оператора Open составляет имя

файла, режим доступа и файловый номер. Синтаксис оператора Open выглядит

Open filename For mode As fileno:

Параметр filename определяет имя открываемого файла, а параметр mode –

режим доступа. Он может иметь значения Append (Дополнение), Input (Ввод),

Output (Вывод), Binary (Двоичный) и Random (Произвольный). Наконец, параметр

fileno определяет так называемый файловый номер - целое число, по которому

идентифицируется открываемый файл. Файловые номера используются при

выполнении файловых операций в программе. При попытке открыть

несуществующий файл в режимах Append, Binary, Output или Random Visual Basic

создает пустой файл. Кроме того, если параметр mode не указан, файл открывается

в режиме произвольного доступа. Ни один из режимов не имеет явных преимуществ

перед остальными. У каждого есть свои достоинства, а выбор зависит от формата

данных файла. После завершения работы с файлом его следует закрыть оператором

Close с одним параметром - файловым номером:

Close fileno