Встроенные функции и операторы для работы с массивами
В VBA есть встроенные функции определения границ массивов:
· LBound(имяМассива) – возвращает нижнюю границу массива(начало нумерации)
· UBound(имяМассива) – возвращает верхнюю границу массива(индекс последнего элемента)
Применение этих функций позволяет передавать в процедуры только сам массив, а размер массива определять в самой процедуре. Например процедуру печати одномерного массива можно написать так:
Public Sub ПечатВект(вектор)
Dim i As Integer,n as Integer
n=UBound(вектор)
Debug.Print
For i = 1 To n
Debug.Print вектор(i),
Next
Debug.Print
End Sub
· Array(список значений) - присвоение массива, возвращаемого функцией Array, переменной типа Variant
Инструкция ReDim используется для задания верхних и нижних границ индексов для каждой размерности, изменения числа размерностей,. Инструкцию ReDim можно применять для изменения динамического массива столько раз, сколько потребуется. Однако при каждом применении данные, содержащиеся в массиве, теряются. Инструкция ReDim Preserve увеличивает размер массива, сохраняя при этом его содержимое. В следующем примере показывается, как можно увеличить массив на 10 элементов без уничтожения текущих значений элементов массива.
Public Sub ИзменениеРазмераМассва()
Dim вектор As Variant
вектор = Array(5, -18, 8.9, 7, 4, -5, 25)
ReDim Preserve вектор(UBound(вектор) + 10)
End Sub
Использование ключевого слова Preserve вместе с динамическим массивом позволяет изменить только верхнюю границу последней размерности массива, однако изменение числа размерностей невозможно. Добавленные элементы содержат значение ноль(0), для числовых типов массива, пустая строка (“”) для текстовых и значение Empty (пусто), для типа Variant.
Алгоритмы работы с массивами
Алгоритмы заполнение массивов
Некоторые примеры заполнения массивов были рассмотрены выше. Приведём несколько типичных процедур заполнения массива.
Полезная процедура формирования вектора случайных чисел. Удобно применять, когда нужен произвольный вектор числового типа.
Public Sub СлучайныйВектор(вектор)
Dim i As Integer
For i = 1 To UBound(вектор)
вектор(i) = Int(Rnd * 100 - 30)
Next
End Sub
· Rnd –функция, возвращающая случайное число из диапазона [0,1]
· Int - функция, возвращающая целую часть числа
В итоге, процедура формирует вектор случайных целых чисел в диапазоне от -30 до +70
Алгоритмы поиска в массивах
Поиск по ключу – это поиск элементов массива или(и) их индексов отвечающих некоторому условию. Функция поиска ПоискПоКлючу логического типа, имеет три параметра: массив, в котором осуществляется поиск, имя объявленного, но не созданного массива для заполнения найденными элементами, имя массива для найденных индексов. Так как поиск может оказаться безуспешным ( нет элементов отвечающих условию), вводится переменная логического типа Флаг, которая меняет значениес False на True если найдётся элемент отвечающий условию. При возвращении в вызывающую процедуру, проверяется значение функции.
Рисунок 3 Запускающая процедура
Рисунок 4 Код функции поиска по ключу и функции условия
Задание: создайте этот проект, добавьте в модуль библиотека функции ПоискПоКлючу, функУсловия. В модуле библиотека должны быть также рассмотренные ранее процедуры СлучайныйВектор и ВыводВектораЛист, выполните его в пошаговом режиме.