Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книга1(полный конспект).docx
Скачиваний:
55
Добавлен:
23.12.2018
Размер:
49.16 Mб
Скачать

9.6. Массивы

Массивы (arrays) позволяют ссылаться на ряд переменных с помощью имени и числа, называемого индексом массива (index). Часто это позволяет создавать более короткий или простой код, т.е. позволяет применять циклы.

Visual Basic создавать два вида массивов: массив фиксированного размера (fixed – size array), размер которого не изменяется, и динамический массив (dynamic array), размер которого может изменятся во время выполнения программы.

9.6.1. Объявление массивов фиксированной длины

В операторах объявления массива за его именем в круглых скобках задается верхняя и нижняя границы массива. Она не должна выходить за границы диапазона задания типа данных Long. Например:

Dim ArrayX(20) As Integer ‘массив в 21 элемент

Dim ArrayY(100) As Double ‘массив в 101 элемент

Первое объявление создает массив в 21 элемент, индекс которого начинается с 0 до 20. Второе объявлении создает массив в 101 элемент, индекс которого начинается с 0 до 100.

Для явного задания нижней границы следует использовать ключевое слово To:

Dim ArrayX(1 To 20) As Integer ‘массив в 20 элементов

Dim ArrayY(50 To 100) As Double ‘массив в 50 элементов

Можно создавать и многомерные массивы. Например:

Dim ArrayX(20, 20) As Integer

Dim ArrayX(1 To 20, 1 To 100) As Integer

Dim ArrayX(3, 1 To 20,1 To 100) As Integer

Для того чтобы все индексы массивов начинались с 1 необходимо вначале программы создать директиву Option Base 1.

Пример использования статистического массива:

‘Программа запрашивает пользователя ввести 5 чисел и затем выводит их на экран.

Option Base 1

Const ArrayMax As Integer = 5

Sub ArrayX()

Dim NumArray(AttayMax) As Integer

Dim Numb As Integer

Dim I As Integer

For I = 1 To 5

Numb = InputBox(«Введите число:», «Ввод чисел», 0)

NumArray(I) = CInt(Numb)

Next I

MsgBox NumArray(1) & “, “ & NumArray(2) &”, “ & NumArray(3)_& “, “ & NumArray(4) & “, “ & NumArray(5)

End Sub

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

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

Dim ArrayX() As Integer ‘описывает динамический массив ArrayX

ReDim ArrayX(20) As Integer ‘заново задает размер массива в 20 элементов.

Правилами VBA разрешается присваивать все содержимое массива динамическому массиву

ArrayX()=ArrayY()

Приведем пример использования динамических массивов

Option Explicit

Option Base 1

Sub ArrayX()

Const Title = «Ввод чисел»

Dim Up As Integer

Dim Down As Integer

Dim NumArray()As Integer

Dim Numb As Integer

Dim I As Integer

Dim NStr As String

NStr = “”

Down = InputBox(«Введите нижнюю границе массива», Title)

Up = InputBox(«Введите верхнюю границу массива», Title)

ReDim NumArray(Down To Up) As Integer

For I = Down To Up

Numb = InputBox(«Введите число:», Title)

NumArray(I) = CInt(Numb)

Next I

For I = Down To Up

NStr = NStr & NumArray(I) & “”

Next I

MsgBox NStr, Title

End Sub

Во избежание ошибок при определении нижней и верхней границы динамических массивов в VBA встроены две функции.

Lbound(arrayName [,dimension]) – функция для определения нижней границы массива.

Ubound(arrayName [,dimension]) – функция для определения верхней границы массива.

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

Вот пример программы показывающей работу этих функций:

Option Explicit

Option Base 1

Sub ArrayX()

Const Title = «Ввод чисел»

Dim Up As Integer

Dim Down As Integer

Dim NumArray() As Integer

Dim Numb As Integer

Dim I As Integer

Dim NStr As String

NStr = “”

Down = InputBox(«Введите нижнее границе массива», Title)

Up = InputBox(«Введите верхнюю границу массива», Title)

ReDim NumArray(Down ToUp) As Integer

For I = Lbound(NumArray) To Ubound(NumArray)

Numb = InputBox(«Введите число:», Title)

numAttay(I) = CInt(Numb)

Next I

For I = Lbound(NumArray) To Ubound(NumArray)

NStr = NStr & NumArray(I) & “”

Next I

MsgBox NStr,, Title

End Sub