Двумерные массивы
Двумерные массивы представляют набор однотипных элементов, расположенных в несколько строк и столбцов, например, двумерный массив из целых чисел выглядит следующим образом:
4 –3 2 4 5
6 3 2 4 0
7 1 2 6 0
12 24 25 8 4
0 4 5 8 3
Каждый элемент двумерного массива обозначается при помощи имени и индексов, заключенных в круглые скобки, например, A(i, j), X(4, 3),P(2i,j+1), первый индекс – номер строки, второй – номер столбца.
Двумерный массив, называемый также матрицей, описывается при помощи оператора Dim.
DimA(10, 10)AsТип ‘ нумерация с нуля
DimA(1To10, 1To10)AsТип ‘ нумерация с единицы
Матрица, у которой количество строк равно количеству столбцов, называется квадратной матрицей.
Ввод двумерного массива
Считывание массива с рабочего листа Excel.
For i = 1 To N
For j = 1 To M
A(i, j) = Cells(i, j)
Nextj
Nexti
‘ N– количество строк массива,M– количество столбцов массива.
Формирование массива на рабочем листе 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)
Nextj
Nexti
Вывод двумерного массива
Вывод двумерного массива на рабочий лист Excelвыглядит следующим образом:
For i = 1 To N
For j = 1 To M
Cells(i, j) = A(i, j)
Nextj
Nexti
Формирование матрицы
При формировании квадратной матрицы будем пользоваться следующими инструкциями. Общий вид квадратной матрицы, например размерности 44, выглядит следующим образом:
-
А11
А12
А13
А14
А21
А22
А23
А24
А31
А32
А33
А34
А41
А42
А43
А44
В квадратной матрице выделяются главная и побочная диагонали. Условия нахождения элемента на главной или побочной диагонали показаны на рис. 7.
Относительно каждой диагонали элемент матрицы может находиться выше или ниже диагонали. Условия нахождения элемента в каждой из частей матрицы показаны на рис. 8.
I,J– номера строки и столбца, в которых находится элемент матрицы.
Побочная
диагональ, I
+ J
= N
+ 1
Главная
диагональ, I
= J
Рис. 7. Главная и побочная диагонали
I
= J I+J
= N+1
Рис. 8. Условия нахождения элемента выше или ниже диагонали
Относительно обеих диагоналей элемент матрицы может находиться в одной из четвертей. Условия нахождения элемента в каждой из них показаны на рис. 9.
(I>J)
and (I+J>N+1)
Рис. 9. Нахождение элемента в одной из четвертей
Пример 1
Сформировать матрицу 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 PR22()
Dim a(10, 10) As Integer
Dim N As Integer
Dim i As Integer
Dim 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
Пример 2
Сформировать матрицу X(N,N) вида
-
1
0
0
0
…
N
0
2
0
0
…
0
0
0
3
0
…
0
.
.
.
.
…
.
0
2
0
0
…
0
1
0
0
0
…
N
Описание и вывод матрицы будут как в предыдущем примере, здесь и далее будем рассматривать только фрагмент программы, в котором формируется матрица.
For i = 1 To N
For j = 1 To N
X(i, j) = 0
If i = j Then X(i, j) = i
If i + j = N + 1 Then X(i, j) = N + 1 – i
Next j
Next i
Пример 3
Сформировать матрицу Y(N,N) вида
-
1
1
1
1
…
1
1
0
0
0
…
1
1
0
0
0
…
1
.
.
.
.
…
.
1
0
0
0
…
1
1
0
0
0
…
1
1
1
1
1
…
1
For i = 1 To N
For j = 1 To N
If i = 1 Or i = N Or j = 1 Or j = N Then Y(i, j) = 1 Else Y(i, j) = 0
Next j
Next i
Пример 4
Сформировать матрицу Z(N,N) вида
-
1
0
0
0
0
…
0
1
2
0
0
0
…
0
1
2
3
0
0
…
0
1
2
3
4
0
…
0
.
.
.
.
.
.
.
1
2
3
4
5
…
0
1
2
3
4
5
…
N
For i = 1 To N
For j = 1 To N
If i >= j Then Z(i, j) = j Else Z(i, j) = 0
Next j
Next i
Пример 5
Сформировать матрицу Q(N,N) вида
-
1
2
1
2
…
2
1
2
1
…
1
2
1
2
…
.
.
.
.
…
1
2
1
2
…
For i = 1 To N
For j = 1 To N
If (i +j) mod 2 = 0 Then Q(i, j) = 1 Else Q(i, j) = 2
Next j
Next i