Скачиваний:
79
Добавлен:
02.05.2014
Размер:
145.92 Кб
Скачать

Массивы

Массив — это набор элементов определенного типа, каждый из которых имеет свой порядковый номер, называемый индексом. Различают статические и динамические массивы. Границы статического массива устанавливаются на этапе разработки и могут изменяться только в новой версии программы.

Динамические массивы изменяют свои границы в ходе выполнения программы. С их помощью можно динамически задавать размер массива в соответствии с конкретными условиями. Однако следует учесть, что работа с динамическими массивами требует дополнительных затрат на программирование.

Статические массивы

Представьте себе, что вы являетесь председателем союза и хотели бы хранить фамилии всех 150 его частников. Для этого можно просто определить и использовать 150 различных переменных типа String. Но все языки программирования высокого уровня предлагают лучшее решение — массивы (arrays). Вместо объявления 150 различных переменных (типа namel, name2, name3, пате4,...) можно просто объявить один массив, содержащий 150 однотипных элементов. Для объявления массива используется оператор Dim с указанием в круг лых скобках после имени массива его максимального индекса;

Dim aName(150) As String

В этом случае элементы переменной aName различают не по имени, а по индексу:

aName (4) = "Иванов" Print aName(7)

Область определения

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

[Static I Public I Dim] Имя_переменной (Верхняя_граница)

Индексирование с нуля

При использовании массивов не следует забывать, что в Visual Basic индексирование всегда начиатся с нуля, т.е. индекс 0 обозначает первый элемент массива, индекс 1 — второй и т.д.

Option Base

Оператор Option Base позволяет задать индексацию массива с 1:

'(General)(Declarations)

Option Base 1

Этот оператор должен находиться в секции (General) (Declarations)контейнера (формы, модуля, класса).Допустимыми значениями для OptionBase являются только 0 и 1.Этот оператор служит для того, чтобы обеспечить совместимость Visual Basic с другими диалектами Basic, индексация в которых начинается с 1.

Для установки других границ массива необходимо использоватьследующий синтаксис:

[Static I Public I Dim] Имя_переыеннои ([Нижн_предел То] Верхн_предел)

Указанием верхней и нижней границ можно задать любые диапазоны индекса. Это удобно, если индекс несет также определенную смысловую нагрузку (дата, номер заказа, возраст и т.п.):

'(General)(Declarations)

Dim aBirthDate (1980 То 2050)

Многомерные массивы

Visual Basic позволяет также создавать многомерные массивы. При объявлении многомерного массива верхние границы каждой размерности разделяются запятыми:

'(General)(Declarations) Dim aName(10, 25) As String

Массив с именем aName может содержать 286 различных значений (11 х 26 =286).

Private Sub Conunandl_Click ()

aName (1, 3) = "X"

End Sub

Размерность массива может быть и больше. Например, вы составляете список учащихся пяти различных школ, в каждой из которых по десять классов, а в каждом классе максимум 30 учеников.В этом случае можно использовать трехмерный массив, где первое измерение относится к школе, второе — к классу, а третье — к номеру ученика:

Dim aStudent (5, 10, 30) aStudent (3, 5,17) = "Иванов"

В данном примере "Иванов" — это фамилия под номером 17 ученика 5kго класса школы номер 3.

Но трехмерный массив еще не предел — в Visual Basic значения раам^№<х?Ги массивов могут достигать 60.

Для отдельных значений размеров могут указываться диапазоны индексов:

Dim aArrayCI( 80 То 120, 40 То 45, 1 То 256, 1, 1997 То 2050)

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

Иногда при объявлении массива его размер не известен. В этом случае следует объявлять динамичекий массив, что позволяет изменять его размер или размерность во время выполнения приложения.

Динамический массив создается в два этапа. Сначала массив определяют в секции (General) (Declarations) контейнера (формы, модуля, класса) без указания размера:

' (General)(Declarations)

Dim aArrayO As Variant

Затем с помощью оператора Re Dim устанавливают фактический размер

массива:

'(General)(Declarations)

Dim aArray () As Variant Private

Sub Commandl_Click()

ReDim aArray (50, 10)

'Код

End Sub

Синтаксис оператора ReDim:

ReDim (Preserve] Имя_переменной (Границы) [As Гип_данных]

В отличие от обычного Dim, оператор ReDim используется только в процедурах. При этом тип данных указывать не обязательно, особенно если онуже определен оператором Dim. Вы можете использовать оператор ReDim для изменения числа элементов или размерности массива. Однако вы не можете объявить массив с данными одного типа, а затем использовать ReDim для приведения массива к другому типу, за исключением случая, если массив содержит переменные типа Variant. В этом случае приведение массива к явному типу данных допустимо.

Таким образом, размерность массива можно при необходимости изменить. Но тогда возникает опасность потерять его содержимое, так как после изменения размерности элементам массива присваиваются значения по умолчанию.

Однако Visual Basic предоставляет возможность изменять размерность массива без потери содержимого. Для этого следует использовать ReDim вместе с ключевым словом Preserve:

'(General)(Declaration) Dim aArray ()

As Variant Private SubComroandl_Click()

ReDim Preserve aArray (50, 15)

'Код

End Sub

Использование с оператором ReDim зарезервированного слова preserve позволяет сохранить содержимое массива при изменении его размера или размерности. Но следует учитывать, что для многомерных массивов можно изменять только последнее измерение:

'(General)(Declarations)

Dim aArray () As Variant Private Sub Cornmandl_Click()

ReDim aArray (10, 10)

ReDim Preserve aArray (10, 15) 'действует

ReDim Preserve aArray (15, 15) 'ошибка End Sub

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

'(General)(Declarations)

Dim aArray () As Variant Private Sub Commandl_Click()

ReDim aArray (10 To 20)

ReDim Preserve aArray (10 To 25). 'действует

ReDim Preserve aArray (15 To 25) 'ошибка End Sub

Область видимости динамических массивов (контейнерных, глобальных) определяется способом их объявления — если с помощью оператора Public, то массив будет глобальным, если с помощью Dim, то контейнерным.