
Формирование и обработка массивов
Массив – это упорядоченная совокупность однотипных данных. Массив состоит из элементов, имеющих порядковые номера, т.е. элементы массива упорядочены. Таким образом, если объекты одного типа обозначить именем, например "А", то элементы массива будут А(1), А(2), А(3) и т.д. В скобках указан порядковый номер элемента. Порядковый номер не несет никакой информации о значении элемента, а показывает расположение элемента среди других.
К элементам массива можно обращаться только по их номеру (индексу).
Если элементы массива имеют один индекс, то массив называется одномерным или линейным, либо массив - вектор
По способу организации различают:
одномерные массивы (линейные) или массивы - векторы (элементы массива имеют один индекс);
двумерные массивы – матрицы (первый индекс – номер строки, второй – номер столбца);
трехмерные и n-мерные массивы.
Примером одномерного массива является n-мерный вектор: x1, x2, …., xn.
Матрица (2-мерный массив) в общем виде записывается следующим образом:
a11 |
a12 |
a13 |
… a1n |
a21 |
a22 |
a23 |
… a2n |
.. |
|
|
|
am1 |
am2 |
am3 … amn |
Правила работы с массивами:
1.Все используемые в программе массивы должны быть объявлены.
2.Ввод, вывод, обработка массивов осуществляются в цикле.
3.Значения индексов не должны выходить за указанные в объявлении массива пределы.
4.Для обращения к элементу массива нужно определить его индекс.
Примеры объявления массивов.
Dim A(8) As Integer ‘индексы массива 0 1 2 3 4 5 6 7 8
Как вы могли заметить, определение массива отличается от определения обычной переменной только индексом, указанным в скобках. Этот индекс указывает размерность
1
массива. В данной случае массив myArray будет содержать 9 элементов. Почему 9? Потому что нижняя граница массива начинается с нуля. [0,1,2.....7,8].
Соответственно, массив Dim B(3, 3) As Single ‘индексы массива 0 1 2 3
содержит 16 элементов (4 строки х 4 столбца).
Другим способом изменения базового индекса является использование ключевого слова to при объявлении массива:
Dim |
B(l |
То |
3, |
1 То 3) As |
Single ‘индексы массива |
1 |
2 |
3 |
|
Dim |
A(l |
To |
9) |
As Integer |
‘индексы массива 1 |
2 |
3 |
4 |
5 6 7 8 9 |
Способы формирования массивов
Массив в программе задается поэлементно. Формировать массивы можно разными способами.
Вариант 1
Сформировать массив 2 х 2. Значения элементов массива задать в программе.
Dim B(l To 2, 1 То 2) As Single
B(l,l)=2.3 : В(1,2)=4.5 :В(2,1)=1.1 : В(1,2)=6.0
Вариант 2 (тип данных только variant)
Сформировать одномерный массив из 4 элементов. Значения элементов массива задать в программе. Массив вывести на лист.
Sub ff()
Dim a As Variant
a = Array(10, 20, 30, 1)'индексы элементов массива 0,1,2,3
For i = 0 To 3 Sheets(1).Cells(i + 1, 1) = a(i) Next i
End Sub
2

Вариант 3
Сформировать массив из 5 элементов. Данные ввести с клавиатуры.
Sub mm()
Dim B(l To 5) As Single For i = 1 to 5
B(i) = InputBox(“Введите элемент массива №”&I) Sheets(“Лист1”).Cells(1,I)=B(i)
Next I
End Sub
Примечание
При выполнении InputBox(“Введите элемент массива №”&I)
на экране появляется окно
Вариант 4
Использование функции RND
Справка
Функция RND
Возвращает случайное число: 0 или 1.
Пример:
I = RND
Переменной I будет присвоено либо 0, либо 1.
Для генерации целых случайных чисел в заданном диапазоне используется формула: a(i) = Int ((верхняяГраница - нижняяГраница +1)*RND + нижняя граница)
Пример:
I = Int ((100 - 50 + 1) * RND + 50)
В переменную I будет записано целое число в диапазоне от 50 до 100.
3

Формирование одномерного массива
Сформировать одномерный массив из 10 элементов с помощью функции RND и вывести на лист в 4 строку
Option Explicit Sub mass()
Dim a(1 to 10) as integer, i as integer For I = 1 to 10
a(i)= Int ((100 - 50 + 1) * RND + 50) Sheets("Лист1").Cells(4, i) = a(i) Next I
End Sub
i=1,10,1 |
a(i) |
a(i) |
В переменную a(i) будет записан массив из 10 чисел выбранных в диапазоне от 50 до 100 и затем выведен на лист.
Формирование двумерного массива
Сформировать двумерный массив 5 х 10 и вывести на лист, начиная с 5 строки листа.
Option Explicit
Sub pp7()
Dim a(1 To 5, 1 to 10 ) As Integer, i As Integer, j As Integer
'Формирование массива
Randomize
For i = 1 To 5 'смена строки
For j = 1 To 10 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i+4, j) = a(i,j)
Next j
Next i
End Sub
4
Определение суммы и количества элементов, среднего значения одномерного массива
Задача 1
Сформировать одномерный массив из 10 элементов с помощью функции RND в диапазоне от -50 до + 50.
Определить сумму элементов массива, среднее значение положительных и среднее значение отрицательных элементов массива, количество нулевых элементов.
Все вывести на рабочий лист.
Option Explicit Sub pr1()
Dim a(1 To 10) As Integer, i As Integer
Dim summ, sumpol, sumotr, notr, npol, nnul, srpol, srotr summ = 0
sumotr = 0 'сумма отрицательных элементов sumpol = 0 'сумма положительных элементов notr = 0: npol = 0: nnul = 0
Randomize 'позволяет получать новые значения массива 'при каждом запуске программы
'Формирование массива, расчет суммы элементов и вывод на лист
For i = 1 To 10
a(i) = Int(101 * Rnd - 50) Sheets("Лист1").Cells(i, 1) = a(i) summ = summ + a(i)
Next i
Sheets("Лист1").Cells(i + 1, 1) = summ
'Определение суммы и количества полож., отриц, и количества нулевых элементов
For i = 1 To 10 If a(i) > 0 Then
sumpol = sumpol + a(i) npol = npol + 1
Else
If a(i) < 0 Then sumotr = sumotr + a(i) notr = notr + 1
Else
nnul = nnul + 1 End If
End If
Next i
srpol = sumpol / npol |
'среднее значение полож. элементов |
srotr = sumotr / notr |
'среднее значение отриц. элементов |
'Вывод данных на лист
Sheets("Лист1").Cells(1, 2) = "srpol=" Sheets("Лист1").Cells(1, 3) = srpol
5
Sheets("Лист1").Cells(2, 2) = "srotr="
Sheets("Лист1").Cells(2, 3) = srotr
Sheets("Лист1").Cells(3, 2) = "nnul="
Sheets("Лист1").Cells(3, 3) = nnul
End Sub
Поиск экстремальных значений в массиве
Задача 2
1.Сформировать одномерный массив из 10 элементов с помощью функции RND в диапазоне от -50 до + 50.
2.Определить максимальный и минимальный элементы массива. Поменять местами максимальный и минимальный элементы массива.
3.Новый массив вывести на лист
Option Explicit
Sub pr2()
Dim a(1 To 10) As Integer, i As Integer, min As Integer, max As Integer
Dim ind_min As Integer, ind_max As Integer
Randomize For i = 1 To 10
a(i) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i, 1) = a(i) Next i
min = a(1) max = a(1)
ind_min = 1 'индекс минимально элемента ind_max = 1 'индекс максимального элемента
' определение экстремальных значений элементов массива и их индексов
For i = 1 to 10
If min > a(i) then min = a(i) ind_min = i
Else
If max < a(i) then max = a(i) ind_max = i
End If End If Next i
'Смена элементов местами (через промежуточную переменную) prom = a(ind_min)
a(ind_min) = a(ind_max) a(ind_max) = prom
6
'Вывод нового массива начиная с 12 строки листа
For i = 1 to 10 Sheets("Лист2").Cells(i+11, 1) = a(i) Next i
Sheets("Лист2").Cells(1, 2) = "минимум="
Sheets("Лист2").Cells(1, 3) = min
Sheets("Лист2").Cells(2, 2) = "максимум="
Sheets("Лист2").Cells(2, 3) = max
End Sub
Задача 3
'Сформировать массив 5х10 в диапазоне чисел от -300 до 300 и вывести на лист. 'Рассчитать количество элементов, предшествующих максимальному элементу. 'Вывести на лист максимальный элемент и его индексы 'Вывести количество элементов, предшествующих максимальному.
Sub pr()
Dim a(1 To 5, 1 To 10) As Integer, i As Integer, j As Integer, s, n, max, ni, nj, k Randomize
max = -301
'Формирование массива
For i = 1 To 5
For j = 1 To 10
a(i, j) = Int((300 + 300 + 1) * Rnd - 300) Cells(i, j) = a(i, j)
'определение макс. элемента
If max < a(i, j) Then max = a(i, j)
ni = i nj = j End If Next j Next i
'кол-во элементов перед максимальным элементом
For i = 1 To ni For j = 1 To 10 k = k + 1
Next j
Next i
k = k - 10 + nj - 1
'Вывод данных на лист
Cells(1, 12) = "max=" Cells(1, 13) = max Cells(2, 12) = "ni="
7
Cells(2, 13) = ni
Cells(3, 12) = "nj="
Cells(3, 13) = nj
Cells(4, 12) = "k="
Cells(4, 13) = k
End Sub
Формирование и обработка двумерного массива
Пример 4
Сформировать двумерный массив 5 х 10 и вывести на лист
Sub pp7()
Dim a(1 To 5, 1 to 10 ) As Integer, i As Integer, j As Integer
'Формирование массива
Randomize
For i = 1 To 5 'смена строки
For j = 1 To 10 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50)
Sheets("Лист2").Cells(i, j) = a(i,j) Next j
Next i
End Sub
Пример 5
Сформировать массив 5 х 5. Из элементов главной диагонали сформировать новый массив и найти сумму его элементов.
Sub pp7()
Dim a(1 To 5, 1 to 5 ) As Integer, i As Integer, j As Integer, B (1 to 5) as integer, sum as integer
Randomize
For i = 1 To 5 'смена строки
For j = 1 To 5 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i, j) = a(i,j)
Next j
Next i
For i = 1 to 5 b(i) = a(i,i)
Sum = sum + b(i) Sheets("Лист2").Cells(i, 8) = b(i) Next i
Sheets("Лист2").Cells(1, 10) = sum
End Sub
8
Пример 6
'Сформировать матрицу с(i,j)=a(i,j)*b(i)
Sub matr6()
Dim a(1 To 5, 1 To 5), b(1 To 5), c(1 To 5, 1 To 5) As Integer
For i = 1 To 5 |
'изменение номера строки |
B(i) = Int(101 * Rnd + 0) |
|
For j = 1 To 5 |
'изменение номера столбца |
a(i, j) = Int(101 * Rnd + 0) c(i, j) = a(i, j) * B(i) Sheets(1).Cells(i, j) = a(i, j) Sheets(1).Cells(i, j + 8) = c(i, j) Next j
Sheets(1).Cells(i, 7) = B(i) 'вывод массива B(i) в 7 столбце Next i
End Sub
Пример 7
Сформировать матрицу А[10х10]. Найти минимальный элемент всей матрицы и
поменять местами с минимальным элементом пятой строки
'Определение положения минимального элемента в массиве
min = a(1,1) For i = 1 To 10 For j = 1 To 10
If min<a(i,j) then str = i
stl = j
End IF
Next j
Next i
'Определение положения минимального элемента в 5 строке
min5 = a(5,1) For j = 1 to 10
If min5<a(j) then stl5 = j
End IF
Next j
'Меняем элементы местами prom = a(str,stl)
a(str,stl) = a(5,stl) a(5,stl) = prom
End Sub
9