Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методика по Информатике / VBA / Усольцева Л.А.- Программир.на VBA.doc
Скачиваний:
110
Добавлен:
10.04.2015
Размер:
1.71 Mб
Скачать

Вставка группы элементов в массив

Рассмотрим пример.

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

i = 1

While i <= n

If x(i) = 0 Then

For j = n + 1 To i + 1 Step –1

x(j) = x(j – 1)

Next j

x(i) = s

n = n + 1

i = i + 2

Else

i = i + 1

End If

Wend

2.6.2. Вычисления в двумерных массивах

Одномерные массивы представляют простые списки данных. Однако часто бывает необходимо представить таблицы данных в формате строк и столбцов. В VBA можно также создавать массивы, имеющие более трех измерений; фактически, VBA позволяет создавать массивы, имеющие до 60 измерений. Чаще в программировании используются одно- и двумерные массивы.

Двумерные массивы представляют набор однотипных элементов, расположенных в несколько строк и столбцов. Каждый элемент двумерного массива обозначается при помощи имени и индексов, заключенных в круглые скобки, например, A(i, j), X(4, 3), P(2i, j+1), первый индекс – номер строки, второй – номер столбца.

Двумерный массив, называемый также матрицей, описывается при помощи оператора Dim.

Dim A(10, 10) As Тип ‘ нумерация с нуля

Dim A(1 To 10, 1 To 10) As Тип ‘ нумерация с единицы

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

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

Пример.

Dim B( ) As String ‘объявляет динамический массив

ReDim B(1 To 30) ‘изменяет размер массива до 30 элементов

Ввод двумерного массива

Рассмотрим два способа ввода массива.

  1. Считывание массива с рабочего листа Excel.

For i = 1 To N

For j = 1 To M

A(i, j) = Cells(i, j)

Next j

Next i

Где N – количество строк массива, M – количество столбцов массива.

  1. Формирование массива на рабочем листе Excel при помощи счетчика случайных чисел, а затем считывание массива с рабочего листа.

Randomize

For i = 1 To N

For j = 1 To M

Cells(i, j) = Int(Rnd * 100 ­– 50)

A(i, j) = Cells(i, j)

Next j

Next i

Вывод двумерного массива

Вывод двумерного массива на рабочий лист Excel выглядит следующим образом:

For i = 1 To N

For j = 1 To M

Cells(i, j) = A(i, j)

Next j

Next i

Формирование матрицы

При формировании квадратной матрицы будем пользоваться следующими инструкциями. Общий вид квадратной матрицы, например размерности 44, выглядит следующим образом:

А11

А12

А13

А14

А21

А22

А23

А24

А31

А32

А33

А34

А41

А42

А43

А44

В квадратной матрице выделяются главная и побочная диагонали. Условия нахождения элемента на главной или побочной диагонали показаны на рис. 10.

Относительно каждой диагонали элемент матрицы может находиться выше или ниже диагонали. Условия нахождения элемента в каждой из частей матрицы показаны на рис. 11.

I, J – номера строки и столбца, в которых находится элемент матрицы.

Побочная диагональ, I + J = N + 1

Главная диагональ, I = J

Рис. 10. Главная и побочная диагонали

I = J

I+J = N+1

Рис. 11. Условия нахождения элемента выше или ниже диагонали

Относительно обеих диагоналей элемент матрицы может находиться в одной из четвертей. Условия нахождения элемента в каждой из них показаны на рис. 12.

(I>J) and (I+J>N+1)

Рис. 12. Нахождение элемента в одной из четвертей

Пример 19.

Сформировать матрицу X(N, N) вида

4

0

0

0

5

1

4

0

5

2

1

1

4

2

2

1

5

3

4

2

5

3

3

3

4


На побочной диагонали матрицы стоят 5, на главной диагонали стоят 4, в I четверти – 0, во II четверти – 2, в III четверти – 3, в IV четверти – 1.

Программный код

Option Explicit

Sub PR19 ( )

Dim a(10, 10) As Integer

Dim N, i , j As Integer

N = Val(InputBox("Введите N"))

Range(Cells(1, 1), Cells(100, 100)).Select ‘ выделяет диапазон ячеек

Selection.Clear ‘ очищает выделенный диапазон ячеек

Cells(1, 1).Select ‘ снимает выделение

For i = 1 To N

For j = 1 To N

If i + j = N + 1 Then a(i, j) = 5

If i = j Then a(i, j) = 4

If i < j And i + j < N + 1 Then a(i, j) = 0

If i < j And i + j > N + 1 Then a(i, j) = 2

If i > j And i + j > N + 1 Then a(i, j) = 3

If i > j And i + j < N + 1 Then a(i, j) = 1

Next j

Next i

Cells(1, 1) = "Полученная матрица"

For i = 1 To N

For j = 1 To N

Cells(i + 1, j) = a(i, j)

Next j

Next i

End Sub