Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УчебноеПособие по VB_6.doc
Скачиваний:
57
Добавлен:
24.12.2018
Размер:
3.17 Mб
Скачать

Область видимости массивов, объявление массивов

Так же как и переменные, массивы могут быть локальные – уровня процедуры. Локальные массивы доступны только в данной процедуре. При выходе из процедуры данные теряются. Такие массивы объявляются оператором Dim: Dim Array1(10, 20). Локальные массивы модуля объявляются оператором Private.

Массивы уровня формы доступны всем процедурам формы. Они объявляются оператором Dim в разделе Главная.

Глобальные массивы доступны всем процедурам проекта и объявляются оператором Public или Global в разделе Главная формы или модуля.

Способы распределения памяти

В зависимости от способа распределения памяти массивы делятся на массивы со статическим и массивы с динамическим распределением памяти.

Массивы со статическим распределением памяти (для краткости – статические массивы) объявляются операторами Dim, Private, Public, Static:

Static A (1 TO 5, 1 TO 2).

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

Массивы с динамическим распределением памяти (для краткости – динамические массивы) объявляются в два этапа. Сначала они объявляются на уровне контейнера без указания размерности:

Dim AMassiv ( ) As Variant.

Затем с помощью оператора ReDim устанавливаются фактические размерности массива. В отличие от оператора Dim оператор ReDim используется только в процедурах. Оператор ReDim допускает использование переменных для указания размерностей массивов:

ReDim MassivA(5, 10 ) As Integer

ReDim MassivB(m, n ) As Single

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

Когда переопределяются размерности массива, есть опасность потерять содержимое. Чтобы при переопределении размерности массива не потерять данные, совместно с оператором ReDim используется оператор Preserve:

ReDim Preserve MassivA(10, 50)

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

ReDim aArray(10,10) ‘ объявленный массив

ReDim Preserve aArray(10,20) ‘ допускается

ReDim Preserve aArray(15,10) ‘ не допускается

ReDim aArray(5 To 10,10 To 20) ‘объявленный массив

ReDim Preserve aArray(5 To 10,10 To 25) ‘допускается

ReDim Preserve aArray(5 To 10,15 To 20) ‘ не допускается

Удаление массива осуществляется командой Erase:

Erase < имя_массива>

Для статических массивов команда Erase не удаляет массив, а только очищает его.

3.3.2. Функции для работы с массивами

Visual Basic имеет несколько функций для работы с массивами:

Array – создание массива типа Variant.

Lbound(ИмяМассива, Индекс) – возвращает нижнюю границу диапазона индекса массива. Индекс указывается только для многомерных массивов, определяет, к какому измерению массива применяется функция. Например:

Dim aArray(5 To 10,15 To 20)

Lbound (aArray, 2) – определяется нижняя граница второго измерения массива;

Ubound (ИмяМассива, Индекс) – возвращает верхнюю границу диапазона индекса массива;

IsArray (ИмяПеременной) – проверка, является ли переменная массивом.

Пример 3.7. Ввод и вывод одномерного массива.

Option Explicit

Dim OldMassiv(5 To 10) As Single, NewMassiv() As Single

Sub VvodMasiv1(Massiv As Variant )

Dim i As Integer

For i = LBound(Massiv) To UBound(Massiv)

Massiv(i) = Val(InputBox(“Введите” & Str$(i) & “ элемент массива”))

Print “Massiv(“; i; “)=”; Massiv(i)

Next i

End Sub

Private Sub Form_Click()

Cls

VvodMassiv1 OldMassiv

End Sub

В функции InputBox для отображения номера вводимого элемента массива формируется строка символов «Введите» & Str$(i) & « элемент массива», в которой для объединения фрагментов строки используется символ “&” амперсенд (коммерческое И).

Пример 3.8. Ввод и вывод двухмерного массива

Option Explicit

Dim A() As Single

Sub VvodMassiv2()

Dim i As Integer, j As Integer

Dim m As Integer, n As Integer

n = InputBox(«Укажите число строк»)

m = InputBox(«Укажите число столбцов»)

ReDim A(n, m) As Single

For i = 1 To Ubound(A,1)

For j = 1 To Ubound(A,2)

A(i, j) = Val(InputBox(“Введите А(“ & Str$(i) & “,” & Str$(j) & “) _

элемент массива”))

Print A(i, j);

Next j

Print

Next i

End Sub

В данном примере вывод элементов массива в форму осуществляется в виде матрицы. Это обеспечивается за счет использования разделителя “;” в конце оператора Print. Символ “;” в конце оператора Print оставляет курсор в текущей строке. Когда ввод данных в первую строку закончится, оператор Print без параметров возвращает курсор в начало строки.

Пример 3.9. Присвоение значений элементов одного одномерного

массива элементам другого массива.

Sub CopyMassiv()

Dim i As Integer

ReDim NewMassiv(LBound(OldMassiv) To UBound(OldMassiv))

For i = LBound(OldMassiv) To UBound(OldMassiv)

NewMassiv(i) = OldMassiv(i)

Print “NewMassiv(“; i; “)=”; NewMassiv(i)

Next i

End Sub

Private Sub Form_Click()

Cls

VvodMassiv1 OldMassiv

CopyMassiv

End Sub

Visual Basic 6 позволяет непосредственно присваивать значения элементов одного массива элементам другого массива:

Sub CopyMassiv1()

Dim i As Integer

ReDim NewMassiv(LBound(OldMassiv) To UBound(OldMassiv))

NewMassiv = OldMassiv

For i = LBound(OldMassiv) To UBound(OldMassiv)

Print “NewMassiv(“; i; “)=”; NewMassiv(i)

Next i

End Sub

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

Использование функции Array для объявления массива.

При создании массива с помощью функции Array имя создаваемого массива формируется из этого ключевого слова Array и индекса, например Array1, Array2 и т.д. Например:

Dim Array1 As Variant.

Пример 3.10: Обмен данными двух массивов

Sub ОбменДаннымиМассивов()

Dim i As Long

ReDim A(1 To 20) As Long

ReDim B(1 To 20) As Long

Dim Array1 As Variant, Array2 As Variant, Temp As Variant

For i= 1 To 20

A(i) = i ' Сформированы и заполнены данными

B(i) = 2 * i ‘ массивы A и B

Next i

Array1 = A(): Erase A() ‘ массиву Array1 присвоено значение массива A

Array2 = B(): Erase B() ‘ массиву Array2 присвоено значение массива B

Temp = Array1

Array1 = Array2

Array2 = Temp

For i = 1 To 20: Print Array1(i), Array2(i): Next i

End Sub