Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Динамические массивы

Если в момент объявления массива неизвестен его размер или же в процессе выполнения программы требуется изменить размеры массива, то массив изначально необходимо объявить как динамический. При объявлении динамического массива не указывается его размерность, например, Dim A(). Далее в программе должны быть установлены размеры массива при помощи оператора Redim.

Синтаксис ReDim [Preserve] varname (subscripts) [As type]

  • Preserve – ключевое слово, позволяющее сохранить существующие элементы массива;

  • varname – идентификатор массива;

  • subscripts – индексы массива;

  • type – тип элементов массива.

Внимание

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

  • При переопределении динамического массива без ключевого слова Preserve все элементы массива уничтожаются. Включение Preserve в оператор ReDim сохраняет существующие элементы массива, если размерность массива увеличивается. Если размерность массива уменьшается, то данные, находящиеся вне границ переопределенного массива теряются.

  • Если массив многомерный, то при переопределении массива может быть изменена только верхняя граница последнего измерения.

  • Ключевое слово Preserve не может использоваться для изменения количества измерений массива.

  • Не используйте оператор Redim для изменения типа элементов массива.

Для определения границ динамического массива используются функции Lbound (индекс нижней границы) и Ubound(индекс верхней границы).

Синтаксис

Lbound (arrayname [,dimension])

Ubound (arrayname [,dimension])

  • arrayname – имя массива,

  • dimension – номер измерения массива.

Для рассмотренной выше процедуры оператор Debug.Print Lbound(A,1) распечатает значение 0, а оператор Debug.Print Ubound(A,1) распечатает значение 7.

Пример

В процедуре запрашивается ввод целого числа. Создается массив из четного числа элементов, содержащих четные значения, меньшие или равные введенному числу.

Public Sub arr_odd()

Dim n As Integer

Dim b() As Integer

n = InputBox("Введи целое число")

n = n \ 2

If n Mod 2 = 1 Then

ReDim b(1 To n – 1)

Else

ReDim b(1 To n)

End If

For i = 1 To UBound(b)

b(i) = 2 * i

Debug.Print b(i)

Next i

End Sub

Введенное число нацело делится на два. Результат – количество четных чисел, меньших или равных веденному числу. Если результат является четным числом, количество элементов в переопределяемом массиве равно этому числу; если нечетным числом, то на единицу меньше результата деления.

В процедуре используется условный оператор If, который определяет размер массива b в зависимости от четности результата деления нацело введенного числа. Функция Ubound используется для определения количества элементов созданного массива.