Массивы

Массив – это совокупность переменных одного типа. Элементы массива имеют одинаковые характеристики (тип, размер и т.д.). Каждому массиву при объявлении присваивается имя – идентификатор. Переменные, входящие в массив, называются элементами массива. Любой элемент массива обозначается именем массива с индексом, например, A(5), где А – имя массива, 5 – индекс. Другими словами, отдельный элемент массива определяется его позицией (индексом) в массиве. Можно сказать, что массив – это именованная совокупность переменных одного типа, которые различаются значениями своих индексов. Некоторые операторы позволяют осуществлять групповую обработку элементов массива, например, оператор Join. Элементы массива могут участвовать во всех конструкциях языка, в которых допускается использование обычных переменных.

С понятием массива связано понятие размерности. Чаще всего используются одномерные массивы (векторы или строки) и двумерные массивы (матрицы). Максимальное количество измерений массива – 60. Например, ежедневная утренняя и вечерняя температура воздуха в течение месяца представляется двумерным массивом из 31 строки и 2 столбцов, а эта же температура в течение года является уже трехмерным массивом 12*31*2.

Индекс элемента массива – это число (положительное, отрицательное или 0). Количество индексов элемента массива должно соответствовать количеству измерений массива: первый индекс соответствует первому измерению, второй индекс – второму и т. д. Для указания индекса можно использовать переменные или выражения. При этом значение выражения округляется до целого числа.

Значение каждого индекса имеет нижнюю и верхнюю границу. Массив должен быть обязательно объявлен. Синтаксис объявления массива:

Dim varname(subscripts) As type

· varname – имя массива;

· subscripts – индексы измерений массива;

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

Для каждого измерения (subscripts) можно указать нижнюю и верхнюю границы индекса (граничная пара) в виде lower to upper, где обе границы суть целые числа или выражения, результат вычисления которых есть число. Нижняя граница может быть опущена, тогда она предполагается нулевой, если инструкция Option Base не указывает на другое. Например, размещенная в области Declarations инструкция Option Base 1 устанавливает нижний индекс всех массивов в единицу.

Рекомендуется предусматривать такие значения индексов, которые соответствовали бы максимально возможному количеству элементов массива в каждом измерении. Индексы каждого измерения отделяются друг от друга запятой. Например, объявление Dim A (1 To 5, 2 To 17) определяет двумерный массив A из пяти строк с индексами от 1 до 5 и 16 столбцов с индексами от 2 до 17, всего 80 элементов. Запись A(3,10) указывает на девятый элемент третьей строки.

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

ReDim [Preserve] varname (subscripts) [As type]

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

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

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

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

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

Для определения границ динамического массива применяются функции LBound и UBound . Синтаксис:

LBound (arrayname [,dimension]) UBound (arrayname [,dimension])

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

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