Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Visual Basic.doc
Скачиваний:
105
Добавлен:
09.04.2015
Размер:
1.1 Mб
Скачать

Именованные аргументы

При вызове процедур SubилиFunctionвозможна позиционная передача аргументов, т.е. в порядке следования в описании процедуры. Кроме того, аргументы могут передаваться по именам, вне зависимости от позиции в списке аргументов.

ИмяАргумента:= ЗначениеАргумента

Именованный аргумент состоит из имени аргумента, за которым следует двоеточие со знаком равенства (:=) и значение аргумента.

Именованные аргументы особенно полезны при вызове процедуры с необязательными аргументами (Optional).

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

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

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

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

В список аргументов процедуры рекомендуется включать все входные и все выходные для этой процедуры данные.

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

Должно выполняться следующее соответствие между списками аргументов при объявлении и при обращении:

Аргумент Аргумент при обращении

при объявлении

Переменная Константа, переменная, элемент массива, выражение.

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

Форма Форма

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

Пример 1.

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

С = А + В

End Sub

Sub Form_Click ()

Dim X(1 To 3) As Integer

X(1) = 1

X(2) = 2

Sum X(1), X(1) + X(2), X(3)

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

End Sub

Sub Command1_Click ()

Dim X As Integer, Z As Integer

X = 5

Sum X, 4, Z

Print X, Z

End Sub

Результат при щелчке на форме: 1 2 4

Результат при щелчке на кнопке: 5 9

Пример 2.

Sub Sum (A ( ) As Integer)

A(3) = A(1) + A(2)

End Sub

Sub Form_Click ()

Dim X(3) As Integer

X(1) = 1

X(2) = 2

Sum X

Print X(1), X(2), X(3)

End Sub

Результат: 1 2 3

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

Лекция 11

Пример 1

Заданы два одномерных массива a(1),a(2), … ,a(k) иb(1),b(2), … ,b(l). Центрировать и вывести массива, если среднее значение его элементов меньше среднего значения элементов массиваb. В противном случае центрировать и вывести массивb. Каждый элемент центрированного массива получается как разность значения соответствующего элемента исходного массива и среднего значения его элементов.

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

Перечень подзадач.

  1. Ввод одномерного массива x. Применим уже знакомую нам процедуру:Ввод_вектора (x() As Single).

  2. Вычисление для одномерного массива x, имеющегоimaxэлементов, среднего значения его элементов. Применим функцию:

Среднее(x() As Single, imax As Integer) As _ Single.

  1. Центрирование одномерного массива x, имеющегоimaxэлементов. Применим процедуру:

ЦенирированиеВектора (x() As Single, imax As _ Integer, Вычитаемое As Single).

  1. Вывод одномерного массива x. Применим процедуру:Вывод_вектора (x() As Single).

Рис. 11.1. Укрупненная блок-схема основного алгоритма

Укрупненная блок-схема основного алгоритма

Укрупненная блок-схема основного алгоритма приведена на рис. 11.1. Алгоритмы подзадач 2, 3 и 4 характеризуются простотой, что позволяет обойтись без составления их блок-схем. Основой всех этих трех алгоритмов является простой цикл.

Интерфейс проекта

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

Исходный текст программы

Option Explicit

Option Base 1

Private Sub Command1_Click()

Dim k As Integer, l As Integer

Dim a() As Single, b() As Single

Cls

k = InputBox("k=?")

l = InputBox("l=?")

Print "k= "; k; " l= "; l

ReDim a(k), b(l)

Print "Ввод вектора а"

Ввод_вектора a

Ввод_вектора b

Dim СреднееА As Single, СреднееВ As Single

СреднееА = Среднее(a, k)

СреднееВ = Среднее(b, l)

If СреднееА < СреднееВ Then

ЦентрированиеВектора a, k, СреднееА

Print "Центрированный вектор а"

Вывод_вектора a

Else

ЦентрированиеВектора b, l, СреднееВ

Print "Центрированный вектор b"

Вывод_вектора b

End If

End Sub

Private Sub Ввод_вектора(x() As Single)

1: Dim i As Integer

Dim i_min As Integer

Dim i_max As Integer

i_min = LBound(x)

5: i_max = UBound(x)

For i = i_min To i_max

x(i) = InputBox("Элемент вектора (" _

& i & ")=?",”Ввод вектора”)

Print x(i),

Next

Print

End Sub

Private Function Среднее(x() As Single, _

imax As Integer) As Single

Dim sum As Single, i As Integer

sum = 0

For i = 1 To imax

sum = sum + x(i)

Next

Среднее = sum / imax

End Function

Private Sub ЦентрированиеВектора(x() As Single, _

imax As Integer, Вычитаемое As Single)

Dim i As Integer

For i = 1 To imax

x(i) = x(i) - Вычитаемое

Next

End Sub

Private Sub Вывод_вектора(x() As Single)

1: Dim i As Integer

Dim i_min As Integer

Dim i_max As Integer

i_min = LBound(x, 1)

5: i_max = UBound(x, 1)

For i = i_min To i_max

Print x(i),

Next

Print

End Sub