Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
425 Кб
Скачать
☆

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

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

В VB динамический массив создается в два этапа. На первом этапе массив описывают без указания размера ( в скобках) в секции (General) ( Declarations) формы, стандартного модуля или модуля класса , в зависимости необходимой видимости его в программе (глобальной, локальной).

(General) ( Declarations)

Dim name Array ( ) As String

На втором этапе с помощью оператора ReDim устанавливают фактический размер массива. Синтаксис оператора ReDim имеет вид

ReDim [Preserve] <имя массива>(Границы) [Тип данных]

Пример:

(General) ( Declarations)

Dim nameArray ( ) As String

Private Sub Cjmmand Click ( )

ReDim nameArray (50, 10)

Операторы

End Sub

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

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

Для того, чтобы изменять размерность массива без потери содержимого, следует использовать DeDim вместе с ключевым словом Preserve.

Пример:

(General) ( Declarations)

Dim nameArray ( ) As String

Private Sub Cjmmand Click ( )

ReDim nameArray (50, 5)

ReDim Preserve NameArray (50, 10)

Операторы

End Sub

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

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

Пример:

(General) ( Declarations)

Dim name Array ( ) As String

Private Sub Cjmmand Click ( )

ReDim nameArray (10 to 20)

ReDim Preserve nameArray (10 to 5) ‘ оператор записан верно

ReDim Preserve nameArray (15 to 10) ‘ оператор записан с ошибкой

Операторы

End Sub

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

9.3. Функции, предназначенные для работы с массивами.

Иногда при объявлении динамического массива при задании границ массива переменными его фактический размер неизвестен.

Поэтому для определения нижней и верхней границ массива используются функции LBound и Ubound. Синтаксис этих функций имеет вид:

LBound ( Имя массива, Размерность)

Ubound ( Имя массива, Размерность)

Пример:

(General) (Declarations)

Dim nameArray ( ) As Variant

Private Sub Command1_Click ( )

Static iCount As Integer

iCount = iCount + 1

ReDim Preserve (10, ICount)

nUBound = Ubound ( nameArray, 2 )

nLBound = Ubound ( nameArray, 2 )

End Sub

В данном примере после каждого щелчка мышью на кнопке Command1 верхняя граница второго измерения массива nameArray увеличивается на единицу и для её определения достаточно вызвать функцию Ubound.

Элементы управления как и переменные, также могут объединяться в массивы.

Начиная с Visual Basic 6.0, вы имеете возможность присвоить содержимое одного массива другому так же, как вы присваиваете значение одной переменной другой.

Пример:

Sub SyteCopy ( oldCopy ( ) As Byte, newCopy( ) As Byte)

newCopy = oldCopy

End Sub

В этом примере элементам массива newCopy присваиваются элементы массива oldCopy

Существуют определенные правила присвоения массивов которые не следует забывать. Например. если присвоение переменной , объявленной как Long, значения переменной типа Integer осуществляется без всяких проблем, то присвоение переменной типа Integer значения переменной типа Longe вызовет ошибку переполнения . В дополнение к правилам работы с типами данных, при присвоении массивов необходимо учитывать размерности массивов, количество элементов в массивах разных размерностей и тип массива – статический или динамический.

Попытка присвоения массивов различных размерностей и типов данных может быть успешной или неуспешной в зависимости от следующих факторов:

типа массива, используемого в левой части оператора присваивания (статический или динамический) ;

совпадения или несовпадения количества размерностей массивов в левой и правой части оператора присваивания;

совпадения или несовпадения количества элементов в каждой размерности массива;

типов данных элементов массивов ( типы должны быть совместимыми).

Результаты присвоения массивов приведены в таблице

Тип массива в левой части оператора присваивания

Совпадают ли

Значения размерностей?

Совпадает ли число элементов массивов?

Результат присваивания

Динамический

Нет

Да или нет

Успешно. Размерность и число элементов массива в левой части оператора присваивания при необходимости изменяется

Динамический

Да

Нет

Успешно. Размерность и число элементов массива в левой части оператора присваивания при необходимости изменяется

Динамический

Да

Да

Успешно

Статический

Да или нет

Да или нет

Неуспешно с ошибкой компиляции

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