Динамические массивы
Вложенные циклы For-Next
Многомерные массивы
Многомерные массивы имеют несколько измерений. Чаще всего применяются двумерные массивы (матрицы). Матрицу можно представить в виде обычной таблицы с несколькими строками и столбцами.
Для того чтобы объявить двумерный массив, нужно воспользоваться командой Dim с указанием размерности каждого из измерений. Остальные правила объявления такихмассивов и работы с ними аналогичны таковым для одномерных массивов. Например, мы можем указать лишь размеры измерения массива:
Dim MyArrayA(10, 1) As Single
Массив MyArrayА содержит 11 строк и 2 столбца типа Single.
Можно в явном виде задать границы размерностей:
Dim MyArrayB(1 To 25, 1 To 5)
Массив MyArrayB содержит 25 строк и 5 столбцов. Границы нумерации заданы явно. Тип не указан - в массиве можно хранить любые данные.
В листинге ниже приведен пример программы, которая объявляет двумерный массив 5х2 и предлагает ввести в него фамилии и номера телефонов сотрудников.
Dim MyArray(1 To 5, 1 To 2)
For i = 1 To 5
MyArray(i, 1) = InputBox("Введите фамилию №" & i)
MyArray(i, 2) = InputBox("Введите Телефон №" & i)
Next i
В таблице вы можете видеть массив MyArray после заполнения его фамилиями и номерами телефонов. В MyArray (1,1) мы внесли фамилию "Иванов", в MyArray (1,2) - телефон Иванова 898989898 и т.д.
Таблица Заполненный массив MyArray | ||
Индекс | ||
Иванов | ||
Петров | ||
Сидоров | ||
Александров | ||
Маринин |
Эта программа очень похожа на те, которые мы писали для работы с одномерными массивами. В цикле, тело которого повторяется 5 раз, мы поочередно запрашиваем фамилию и номер телефона.
Один цикл неудобно использовать для работы с массивами больших размерностей. Нетрудно представить себе, какой громоздкой получится решение задачи копирования одной матрицы 100х100 в другую такую же. Кстати, при обработке данных в Microsoft Excel вам постоянно придется обращаться с большими двумерными матрицами. К счастью, существует механизм вложенных циклов, который помогает решать подобные задачи.
Принцип работы вложенных циклов кроется в их названии. Все очень просто - один цикл вкладывается в другой. Например, для заполнения массива 10х10 случайными целыми числами от 1 до 10 можно написать такую программу .
Dim MyArray(1 To 10, 1 To 10)
For i = 1 To 10
For j = 1 To 10
MyArray(i, j) = Int(Rnd(1) * 10)
Next j
Next i
Внешний цикл (i) выполняется один раз, после чего внутренний (j) - десять раз. За один проход внешнего цикла внутренний выполняет десять - заполняется первая строкамассива (с индексами от 1,1 до 1,10) и т.д.
Когда вы используете массив, не всегда известно заранее, сколько элементов он будет иметь. В такой ситуации можно объявить массив, который содержит заведомо больше элементов, чем может понадобиться, но это приведет к нерациональному использованию системных ресурсов. Что же делать? Динамические массивы - вот достойный ответ на этот вопрос.
Решим задачу. Программа просит пользователя ввести количество сотрудников, которое сохраняет в переменной ArraySize, а потом создает массив, одна из размерностей которого равняется ArraySize.
Чтобы воспользоваться динамическим массивом, сначала нужно объявить пустой массив, например, командой Dim MyArray(), а потом задать размерность массива командойReDim .
Dim MyArray()
ArraySize = InputBox("Введите количество сотрудников")
ReDim MyArray(1 To ArraySize, 1 To 2)
В итоге, если на вопрос программы о количестве сотрудников мы ввели число 15, будет создан двумерный массив размерностью 15х2.
Если в программе возникла ситуация, когда последней размерности объявленного и заполненного массива не хватает для хранения данных, вы можете увеличить его командойReDim с ключевым словом Preserve. Благодаря ему данные, внесенные ранее в массив, будут сохранены. Например, для добавления двух дополнительных столбцов вдинамический массив из листинга 7.7. нужно использовать такую команду:
ReDim Preserve MyArray(1 To ArraySize, 1 To 4)