Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по Ms Access.doc
Скачиваний:
92
Добавлен:
19.05.2015
Размер:
1.86 Mб
Скачать

9. Операторы Exit

В VBA имеется несколько операторов Exit для выхода из процедур-функций, процедур-подпрограмм, процедур обработки свойств или повторно выполняемых блоков операторов в структурах Do…loop, For…Next, For Each … Next.

Операторы Exit обрабатываются следующим образом:

  • Exit Function, Exit Sub и Exit Property вызывают немедленный выход из функции, подпрограммы или процедуры обработки свойств, в которой находится соответствующий оператор Exit…. Управление получает следующий оператор в вызывающей процедуре.

  • Exit Do может применяться в структуре Do…loop и предназначен для немедленной передачи управления оператору. следующему после Loop.

  • Exit For может применяться только в структуре For…Next или For Each …Next и предназначен для немедленной передачи управления оператору, следующему после

Next.

Пример

Дан одномерный массив. Найти первый отрицательный элемент и определить его номер позиции.

Рrivate Sub Кнопка0_Click()

Dim a(10) As Integer, i, k As Byte, x As Integer, s As String

For i = 1 To 10

a(i) = InputBox("Ввести А")

s = s & a(i) & " "

Next i

Поле1.Value = s

For i = 1 To 10

If a(i) < 0 Then

k = i

Exit For

End If

Next i

MsgBox "k=" & Str(k)

MsgBox "отрицательное =" & a(k)

End Sub

  1. Функции для работы со строковыми переменными

Функция

Назначение

Len (строка)

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

Trim (строка)

Удаляет начальные и конечные пробелы

Ltrim (строка)

Удаляет начальные пробелы

Rtim(строка)

Удаляет конечные пробелы

Mid(строка,начальнаяпозиция[,

числосимволов])

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

Mid(строка, начальнаяпозиция)

Выделяет из строки, начиная с указанной позиции оставшуюся часть

Instr (нач_ позиция,строка_исходная,подстрока)

Ищет позицию первого включения внутри заданной строки подстроки

Right(строка, число_символов)

Из заданной строки выделяет справа заданное число символов

Left(строка,число_символов)

Из заданной строки выделяет слева заданное число символов

Space(число_пробелов)

Строка пробелов заданной длины

Time()

Строка, содержащая текущее время

Date()

Строка, содержащая текущую дату

Str(число)

Преобразует число в строку

Val(строка)

Преобразует строку в число

Lcase(строка)

Строка, алфавитные символы которой преобразованы в нижний регистр

Ucase(строка)

Строка, алфавитные символы которой преобразованы в верхний регистр

Chr(код_символа)

Возвращает символ

String(Число_символов,символ)

Задаёт строку заданной длины указанных символов

StrComp (строка1,строка2[,0 или 1 ])

Сравнивает строку1 со строкой2, если 1- не различать верхний регистр,

0-различать

Пример

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

Dim s As String, n, k As Integer, i As Integer, b, c As String

s = InputBox("Ввести строку") 'Вводим строку

c = InputBox("Ввести символ") 'Вводим заданную букву

s = Trim(s) & " " 'Удаляем пробелы в начале

' и конце и добавляем в конце

n = Len(s) 'Вычисляем длину строки

i = 1 'Задаём начальное_значение пар-ра цикла

Do While i <= n - 1 'Пока не достигнут конец строки

k = InStr(i, s, " ") 'Ищем позицию пробела,начиная с i

b = Mid(s, i, k - i) 'Выделяем слово

If Left(b, 1) = c Then 'Если 1-я буква слова совпадает

MsgBox b 'с заданным символом,то вывод

End If 'слова

i = k + 1

Loop

Пример

Одномерный массив задан строкой текстового поля.

Написать функцию, которая ищет максимальный элемент в массиве.

Так как размер строки не задан, то удобно использовать понятие дина- мического массива.

Алгоритм выполнения задачи:

1.В конструкторе форм создать форму вида:

В форме размещены два текстовых поля с именами Поле0 и Поле3 и кнопка, по нажатию которой пишем программный код:

Private Sub Кнопка2_Click()

Dim s As String, n, k As Integer, i, j As Integer, b, c As String

Dim a() As Integer, y As Integer

s = Поле0.Value

s = Trim(s) & " "

i = 1 : j = 1

Do While i <= Len(s) - 1 'Пока не достигнут конец строки

k = InStr(i, s, " ") 'Ищем позицию пробела,начиная с i

b = Mid(s, i, k - i) 'Выделяем слово

ReDim Preserve a(1 To j) 'Объявляем динамический массив с

a(j) = Val(b) 'сохранением предыдущих значений

j = j + 1

s = Mid(s, k + 1) 'Выделяем из строки оставшуюся часть

'после первого пробела

s = LTrim(s) ' Удаляем пробелы слева

Loop

y = максимум(a) 'Вызов функции максимум

Поле3.Value = Str(y) ' Вывод максимального значения

' в текстовое поле

End Sub

Private Function максимум(b() As Integer) As Integer

max = b(1)

For i = 1 To UBound(b)

If b(i) > max Then

max = b(i)

End If

Next i

максимум = max

End Function

Результат работы программы будет выглядеть:

В программе использовано свойство Value элемента управления. Оно означает, что текст содержится в поле или в текстовой части поля со списком. В данном случае текст содержится в поле.

Пример

Дан двумерный массив А(3,3), заполненный случайными числами.

Получить А*А, где А- транспонированная матрица.

Алгоритм

В конструкторе форм создадим форму с 3 текстовыми полями для вывода матриц А, А, А*А и кнопкой, по нажатию которой запишем следующий программный код:

Private Sub Кнопка8_Click()

Dim a(3, 3), at(3, 3), res(3, 3) As Single, i, j, k As Byte, s As String, sum As Single

Заполнение двумерного массива случайными числами

For i = 1 To 3

For j = 1 To 3

a(i, j) = Int(10 * Rnd(5))

Формирование строки для вывода массива

s = s & Str(a(i, j)) & " "

Next j

s = s & Chr(13) & Chr(10)

Next i

Поле0.Value = s

s = " "

Получение транспонированной матрицы

For i = 1 To 3

For j = 1 To 3

at(i, j) = a(j, i)

s = s & Str(at(i, j)) & " "

Next j

s = s & Chr(13) & Chr(10)

Next i

Поле4.Value = s

s = " "

Умножение матрицы на матрицу

For i = 1 To 3

For j = 1 To 3

sum = 0

For k = 1 To 3

sum = sum + a(i, k) * at(k, j)

Next k

res(i, j) = sum

s = s & Str(res(i, j)) & " "

Next j

s = s & Chr(13) & Chr(10)

Next i

Поле6.Value = s

End Sub

Результат работы:

Пример

Создать функцию, которая находит сумму всех элементов в двумерном массиве.

Алгоритм

1.В окне базы данных нажать вкладку Модули/Создать и записать функцию:

Public Function СУММА(A() As Integer) As Integer

СУММА = 0

For i = 1 To UBound(A, 2)

For j = 1 To UBound(A, 2)

СУММА = СУММА + A(i, j)

Next j

Next i

End Function

2. В конструкторе форм создать форму с элементами: 2 текстовых поля под вывод матрицы и суммы элементов массива и кнопку, по нажатию которой пишем процедуру:

Private Sub Кнопка8_Click()

Dim A(3, 3) As Integer, i, j As Byte, s As String, y As Integer

' Заполнение матрицы через генератор случайных чисел

For i = 1 To 3

For j = 1 To 3

A(i, j) = Int(10 * Rnd(5))

s = s & Str(A(i, j)) & " "

Next j

s = s & Chr(13) & Chr(10)

Next i

Поле0.Value = s

' Вызов функции СУММА с передачей параметра А

y = СУММА(A)

Поле6.Value = Str(y)

End Sub

Пример

Вычислить n!

n!=1*2*3*4*5* …

При решении этой задачи удобно использовать понятие рекурсивности объекта.

Объект называется рекурсивным, если он целиком или частично определяет самого себя. Рекурсивной функцией-процедурой называется такая функция-процедура, которая вызывает саму себя.

Алгоритм.

  1. Создаём модуль с функцией:

Public Function factorial(n As Integer) As Double

factorial = 1

If n > 0 Then

Рекурсивный вызов функции

factorial = n * factorial(n - 1)

End If

End Function

  1. В конструкторе создаём форму с 2 текстовыми полями для ввода n и вывода значения факториала и кнопкой, по нажатию которой пишется процедура:

Private Sub Кнопка8_Click()

Dim n As Integer, y As Double

n = Val(Поле0.Value) ‘ В переменную n записываем преобразованное в

число значение текстового поля0

y = factorial(n)

Поле6.Value = Str(y)

End Sub