double arrow

Динамические массивы. Вложенные циклы For-Next

Вложенные циклы 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)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: