Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования в VBA-2012.doc
Скачиваний:
36
Добавлен:
03.03.2016
Размер:
3.64 Mб
Скачать

22. Обработка массивов

Массивструктурированный тип данных, состоящий из фиксированного числа элементов.

Переменную, представляющую собой просто список данных, называют одномерным массивом или вектором.

Для доступа к данным, хранящимся в одномерном массиве, указывают имя массива и порядковый номер (индекс) элемента.

Объявление одномерного массива в VBA имеет следующий синтаксис:

Dim имя (размерность) AS Тип

имя - любое имя для массива, удовлетворяющее правилам VBA для имен переменных.

Размерность массива записывают так:

(нач.знач. To кон.знач)

или

(кон. значене)

нач.знач. и кон.знач - границы допустимых индексов массива.

нач.знач. - определяет нижний предел допустимых индексов.

кон.знач. - верхний предел.

Параметр кон.знач. является обязательным, часть нач.знач. To может отсутствовать. В этом случае элементы массива нумеруются с нуля.

Определение нач.знач. делает программный код более понятным, а также позволяет выявлять ошибки программирования. Кроме того, это дает возможность определения иного начального индекса, отличного от 0.

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

Тип - любой допустимый тип VBA. Если Тип не указан, то все элементы массива имеют тип Variant.

Dim A (1 To 10) As Integer

Dim B (0 To 9) As Single

Dim C (9)

Const N=20

Dim M(1 to N)

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

Имя (Индекс)

A(1), В(0), C(8)

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

Например,

Dim K As Integer

K=2

C(K)=A(K+1)+B(2*K)

Все манипуляции с массивами в осуществляются поэлементно.

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

Алгоритм обработки массива в общем виде:

При работе с массивами удобно хранить данные в ячейках рабочих листов Excel, а ввод и вывод элементов массива осуществлять при помощи свойства Cells.

23. Ввод-вывод элементов массива

Алгоритм ввода массива:

Фрагмент программы.

Sub inp()

Dim i As Integer

Dim n As Integer

Dim X(1 To 10)

As Single

n = InputBox("n=", ,10)

For i = 1 To n

X(i) = Cells(i, 1)

Next

End Sub

Алгоритм вывода массива

Фрагмент программы.

For i = 1 To n

Cells(i, 2) = X(i)

Next

24. Основные алгоритмы обработки массивов

Сумма элементов массива.

Фрагмент программы:

S = 0

For i = 1 To n

S = S + X(i)

Next

MsgBox "S=" & S

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

Фрагмент программы:

P = 1

For i = 1 To n

P = P * X(i)

Next

MsgBox "P=" & P

Поиск максимального

элемента и его номера

Max = X(1)

Nom = 1

For i = 2 To n

If X(i) > Max Then

Max = X(i)

Nom = i

End If

Next

MsgBox "Max=" & Max

& Chr(13) & "Nom=" & Nom

Удаление элемента

из массива

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

Номера элементов

1

2

3

4

5

6

7

Исходный массив

4

7

3

8

9

2

5

Полученный массив

4

7

3

9

2

5

5

m = InputBox("n=")

For i = m To n - 1

X(i) = X(i + 1)

Next

For i = 1 To n - 1

Cells(i, 2) = X(i)

Next

Упорядочение

элементов массива

Сортировка методом пузырька

Номер элемента

1

2

3

4

5

Исходный массив

7

3

5

4

2

Первый просмотр

3

5

4

2

7

Второй просмотр

3

4

2

5

7

Третий просмотр

3

2

4

5

7

Четвертый просмотр

2

3

4

5

7

Sub sort()

Dim n As Integer

Dim i As Integer, j As Integer

Dim Y(1 To 10) As Single

n = InputBox("n=", , 10)

For i = 1 To n

Y(i) = Cells(i, 1)

Next

For j = 1 To n - 1

For i = 1 To n - j

If Y(i) > Y(i + 1) Then

b = Y(i + 1)

Y(i + 1) = Y(i)

Y(i) = b

End If

Next i

Next j

For i = 1 To n

Cells(i, 2) = Y(i)

Next

25. Примеры программ

ЗАДАЧА 9. Найти среднее значение положительных элементов в массиве.

Sub prim()

Dim i As Integer

Dim N As Integer

Dim k As Integer

Dim S As Integer

Dim X(1 To 20) As Integer

N = InputBox("N=", , 10)

For i = 1 To N

X(i) = Cells(i, 1)

Next

S = 0

k = 0

For i = 1 To N

If X(i) > 0 Then

S = S + X(i)

k = k + 1

End If

Next

If k <> 0 Then

S = S / k

MsgBox "S=" & S

Else

MsgBox "ERROR!!!"

End If

End Sub

ЗАДАЧА 10. Дан массив А состоящий из k целых положительных чисел. Записать все четные по значению элементы массива А в массив В.

Sub prim_10()

Dim i As Integer

Dim m As Integer

Dim k As Integer

Dim A(1 To 20) As Integer

Dim B(1 To 20) As Integer

k = InputBox("k=", , 10)

For i = 1 To k

A(i) = Cells(1, i + 1)

Next

m = 0

For i = 1 To k

If A(i) Mod 2 = 0 Then

m = m + 1

B(m) = A(i)

End If

Next

If m <> 0 Then

For i = 1 To m

Cells(2, i + 1) = B(i)

Next

Else

MsgBox "ERROR!!!"

End If

End Sub

ЗАДАЧА 11. Удалить из массива X, состоящего из N элементов, наименьший элемент.

Sub prim_11()

Dim i As Integer

Dim N As Integer

Dim nom As Integer

Dim max As Integer

Dim X(1 To 20) As Integer

N = InputBox("N=", , 10)

For i = 1 To N

X(i) = Cells(1, i)

Next

max = X(1)

nom = 1

For i = 2 To N

If X(i) > max Then

max = X(i)

nom = i

End If

Next

For i = nom To N - 1

X(i) = X(i + 1)

Next

For i = 1 To N - 1

Cells(2, i) = X(i)

Next

End Sub

ЗАДАЧА 12. Проверить содержит ли массив X, состоящий из N элементов, хотябы один нулевой элемент. Если содержит, то поменять его местами с последним элементом массива.

Sub prim_12()

Dim i As Integer

Dim N As Integer

Dim nom As Integer

Dim b As Integer

Dim X(1 To 20) As Integer

N = InputBox("N=", , 10)

For i = 1 To N

X(i) = Cells(1, i)

Next

nom = 0

For i = 1 To N

If X(i) = 0 Then

nom = i

Exit For

End If

Next

If nom <> 0 Then

b = X(nom)

X(nom) = X(N)

X(N) = b

For i = 1 To N

Cells(2, i) = X(i)

Next

Else

MsgBox "NO!!!"

End If

End Sub

ЗАДАЧА 13. Вычислить сумму элементов массива X(N) расположенных между минимумом и максимумом.

Sub prim_13()

Dim i As Integer

Dim N As Integer

Dim nMax As Integer

Dim max As Single

Dim nMin As Integer

Dim min As Single

Dim S As Single

Dim X(1 To 20) As Single

N = InputBox("N=", , 10)

For i = 1 To N

X(i) = Cells(1, i)

Next

max = X(1)

nMax = 1

For i = 2 To N

If X(i) > max Then

max = X(i)

nMax = i

End If

Next

min = X(1)

nMin = 1

For i = 2 To N

If X(i) < min Then

min = X(i)

nMin = i

End If

Next

If nMax < nMin Then

b = nMax

nMax = nMin

nMin = b

End If

S = 0

For i = nMin To nMax

S = S + X(i)

Next

MsgBox "S=" & S

End Sub

ЗАДАЧА 14. Вычислить сумму элементов массива X(N) с четными индексами и произведение с нечетными.

Sub prim_14()

Dim i As Integer

Dim N As Integer

Dim P As Integer

Dim S As Integer

Dim X(1 To 20) As Integer

N = InputBox("N=", , 10)

For i = 1 To N

X(i) = Cells(i, 1)

Next

S = 0

For i = 2 To N Step 2

S = S + X(i)

Next

MsgBox "S=" & S

P = 1

For i = 1 To N Step 2

P = P * X(i)

Next

MsgBox "P=" & P

End Sub