Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Информатика ЛР.doc
Скачиваний:
12
Добавлен:
27.08.2019
Размер:
3.47 Mб
Скачать

Описание динамических массивов

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

Описание динамического массива осуществляется в два этапа:

  1. Объявляется массив с использованием оператора Dim, но без указания размерности. Признаком массива являются скобки после его имени.

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

При помощи оператора ReDim можно задавать любые размерности массива. Например:

Dim A() As Byte

ReDim A(1, 1) ′ двумерный массив

A(0, 0)=13

A(1, 1)=14

ReDim A(3, 3, 1 To 3) ′ трехмерный массив.

Следует иметь в виду, что при каждом выполнении оператора ReDim (то есть при каждом переопределении массива) значения элементов будут потеряны, так как оператор ReDim обнуляет все элементы массива.

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

Например:

Sub Сохранение()

Dim I As Integer

Dim J As Integer

Dim A() As Integer ′объявление массива

ReDim A(2, -5 To 1) ′указание размерности

For I = 0 To 2

For J = -5 To 1

A(I, J) = (I+1)*J^2

Next J

Next I

ReDim Preserve A(2, -5 To 4) ′указание размерности

For I = 1 To 2

For J = 2 To 4

A(I, J) = (I + 1)*J^3

Next J

Next I

End Sub.

Работа с массивами

Для определения значений нижней и верхней границ массива любой размерности используются функции LBound и UBound соответственно.

Например: Используя функции LBound и UBound определить границы одномерного массива А.

Dim Low As Integer

Dim Up As Integer

Low = LBound(A) ′Low – нижняя граница массива

Up = UBound(A) ′Up – верхняя граница массива.

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

Для освобождения оперативной памяти, занимаемой динамическим массивом, используется оператор Erase.

Например:

Sub Память()

Dim A() As Byte

Dim B() As Byte

ReDim A(8) ′Память для А: 9 байт

Erase A ′Память для А: 0 байт

ReDim B(2, 2) ′Память для В: 3*3 = 9 байт

End Sub.

Для того, чтобы просмотреть выполнение данной программы необходимо после ввода программы "Память" выполнить следующие действия:

  1. Дважды выполнив Debug (отладка) > Add Watch (добавить контрольное значение), в окне Watches (контрольное значение) сгенерировать строки, соответствующие массива А и В.

  2. Кликнуть левой кнопкой мыши в любом месте программы для установки там мигающего курсора.

  3. Произвести пошаговое выполнение программы "Память", наблюдая за распределением памяти с помощью окна Watches.

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

Перед серией обращений к функции Rnd должен находиться оператор Randomize.

Например: программа, рассчитывающая 10 случайных чисел от 0 до 1:

Sub случайные_числа()

Dim N As Integer

Dim I As Integer

Dim S() As Single

N = 10

ReDim S(1 To N)

Randomize

For I = 1 To N

S(I) = Rnd

Next I

End Sub.