8569
.pdfErase A
Erase B
В результате массивы будут возвращены в исходное состояние, т.е.
массив А будет иметь размерность (3,4), а динамический массив В не сохранит размерность ().
Другой способ обнуления динамического массива является определение с помощью оператора ReDim с той же размерностью.
Пример
Dim M() As Double
…….
'переопределение массива М
ReDim M(5, 6)
……
'очищение массива М
ReDim Massiv(5, 6)
Заполнение одномерного массива
Прежде чем приступить к работе с массивами его необходимо заполнить, а именно присвоить определенные значения каждому элементу массива. При этом существуют различные способы заполнения массива:
поэлементное присвоение значений, случайными числами или значениями из файла.
Пример заполнения одномерного массива случайными числами
Sub Одномерный_Массив()
Dim A(10) As Integer
For I = 1 To 10
A(I) = Int(Rnd * 100 + 1) 'Задание массива целыми числами от 1 до
100
Cells(i, j) = A(i, j)
Next j
41
Next i
Пример ввод данных в массив
‘ ввод данных в массив в цикле
Dim A(10) As Integer
For I = 0 To 10
A(I) = I + 2
Next I
' ввод элементов массива с явным указанием типа данных
Dim A() As Integer = { 1, 2, 3, 4, 5 }
Пример. Создайте лист «Лист 2» для сохранения результатов данной лабораторной работы. В одномерном массиве найти сумму элементов,
разделить элементы исходного массива на сумму, вывести результирующий массив. На листе с именем «Лист 2» представлены исходные данные
(Рисунок 11).
Рисунок 11. Исходные данные примера Решение с использованием фиксированного массива:
Sub massivep()
Dim a(2 To 12) As Byte
Dim b(2 To 12) As Double
Dim i As Byte
Dim sum As Double
42
sum = o
For i = 2 To 12
a(i) = Worksheets("лист2").Cells(i, 1)
sum = sum + a(i)
Next
For i = 2 To 12
b(i) = a(i) / sum
Worksheets("лист2").Cells(i, 2) = b(i)
Next
End Sub
Решение задачи с использованием динамического массива:
Sub massiveD()
Dim a() As Byte
Dim b() As Double
Dim i As Byte
Dim sum As Double
ReDim a(2 To 12)
ReDim b(2 To 12)
sum = o
For i = 2 To 12
a(i) = Worksheets("лист1").Cells(i, 1)
sum = sum + a(i)
Next
For i = 2 To 12
b(i) = a(i) / sum
Worksheets("лист1").Cells(i, 3) = b(i)
Next
End Sub
43
Практические задания
Написать программу на языке VBA в соответствии с вариантом задания.
1. Дан массив из N вещественных чисел. Составить программный код подсчета числа элементов массива, которые принадлежат отрезку [1,2],
иначе выдать сообщение «Таких элементов нет».
2. Дан массив из N вещественных чисел. Составить программный код следующей задачи: если последний элемент массива положительный,
заменить нулем каждый третий элемент массива, иначе выдать сообщение
«Все без изменений».
3.Дан массив из N целых чисел. Разработать программный код подсчета, сколько раз число пять встречается среди элементов данного массива, иначе сообщить: «Таких элементов нет».
4.Дан массив А из 10 целых чисел. Написать программу подсчета суммы элементов, расположенных между максимальным и минимальным элементами.
5.Дан массив случайных чисел М[10]. Написать программу, в
которой решается задача: в данном массиве все элементы, индексы которых нечётны, разделить на 10, а остальные поменять на противоположные.
6.Написать программу, в которой решается задача: в одномерном массиве из N чисел, вводимых с клавиатуры, поменять местами минимум и максимум.
7.Написать программу, в которой в одномерном массиве из N
случайных чисел из диапазона [20; 40] поменять местами пару элементов, номера которых вводятся с клавиатуры.
8. Дан массив из N вещественных чисел. Написать программу, в
которой найти отношение суммы положительных элементов заданного массива из N элементов к модулю суммы отрицательных элементов и отношение их количества. Если отрицательных элементов нет, выдать
44
сообщение.
9.Дан массив из N вещественных чисел. Написать программу, в
которой решается задача: если очередной элемент массива четный, то прибавить к нему первый, если нечетный - прибавить последний. Первый и последний элементы не изменять.
10.Даны два одномерных массива одинаковой размерности.
Написать программу получения третьего массива такой же размерности,
каждый элемент которого равен сумме соответствующих элементов
данных массивов.
11.Дан массив из N вещественных чисел. Написать программу,
которая позволяет найти количество положительных и отрицательных
элементов в массиве и номер последнего отрицательного элемента.
12.Дан массив А из 10 целых чисел. Написать программу подсчета суммы элементов, расположенных между максимальным и минимальным элементами.
13.Написать программу замены вещественных чисел массива А,
состоящего из десяти элементов, следующим образом: числа, большие
единицы, уменьшить вдвое, а числа, меньшие единицы, увеличить вдвое.
14.Дан массив из N вещественных чисел. Написать программу замены всех элементов массива квадратами, если есть хотя бы один отрицательный элемент в массиве, иначе ничего не менять.
15.Дан массив из N вещественных чисел. Написать программу вычисления произведения и количества положительных элементов массива.
16.Дан массив из N вещественных чисел. Написать программу вычисления произведения отрицательных и положительных элементов массива.
17.Дан массив из N вещественных чисел. Написать программу определения числа отрицательных, положительных и нулевых элементов массива.
45
18. Дан массив из N вещественных чисел. Написать программу решения следующей задачи: если первый элемент массива положительный, то каждый второй элемент массива заменить числом 55,
иначе выдать сообщение: «все без перемен».
19.Дан массив из N вещественных чисел. Написать программу вычисления сколько раз число 11 встречается среди элементов массива,
впротивном случае вывести сообщение: «таких элементов в массиве нет».
20.Дан массив из N вещественных чисел. Написать программу вычисления количества всех элементов, значения которых меньше среднего значения всех элементов массива.
46
Лабораторная работа 6. Двумерные массивы
Цель: овладеть навыками программирования на языке VBA с
использованием двумерных массивов
Теоретические сведения
Объявление двумерного массива фиксированного размера возможно аналогично объявлению одномерно, но при этом добавляются размерности дополнительных измерений через запятую.
Пример объявления двумерного массива:
Dim А (3, 3) As Integer
Dim А(1 То 5, 1 То 5) As Integer
Dim А(5, 1 То 5) As Integer
Два последних примера иллюстрирую задание нижней границы в двумерном массиве.
Ввод/вывод массивов
Ввод/вывод массива осуществляется поэлементно, а для этого нужно использовать два уровня вложения циклов (по строкам и столбцам).
Пример ввода элементов массива с клавиатуры в ячейки таблицы
Sub matrix()
Dim A(3, 3) As Double
Dim i As Byte
Dim j As Byte
Dim Index1 As Integer
Dim Index2 As Integer
For i = 1 To 3
A(1, i) = InputBox("Введите элементы первого столбца") Worksheets("лист1").Cells(i, 1) = A(1, i)
Next
47
For i = 1 To 3
A(2, i) = InputBox("Введите элементы второго столбца") Worksheets("лист1").Cells(i, 2) = A(2, i)
Next
For i = 1 To 3
A(3, i) = InputBox("Введите элементы третьего столбца") Worksheets("лист1").Cells(i, 3) = A(3, i)
Next
End Sub
Функции для работы с массивами
Для работы с массивами можно использовать ряд функций такие как:
Array(), LBound(), UBound(), Join(), Split().
Функция Array() автоматически создает массив типа Variant и нужного размера и заполняет его переданными значениями.
Пример:
Sub Пример_функции()
Dim a() As Variant
‘ввод элементов массива
a = Array(11, 25, 33, 35.62, 55)
‘вывод в диалоговом окне построчно элементов массива
MsgBox a(0) & vbNewLine & a(1) & vbNewLine _ & a(2) & vbNewLine & a(3) & vbNewLine & a(4) End Sub
Функции LBound() и UBound() информируют о нижней или верхней границе массива соответственно, т.е. возвращают номер минимального или
максимального элемента массива.
48
Join() ‒ объединяет в одну строковую переменную строки из массива,
где в качестве разделителя по умолчанию используется пробел, но при необходимости этот символ можно заменить.
Split() ‒ выполняет обратное действие, а именно разъединяет строку символов на массив строк.
Пример:
Sub Пример_функции()
'инициализация переменных типа Variant
Dim ar, tr
‘ввод элементов масса
ar = Array("Первый элемент", "Второй элемент", "Третий
элемент", "Четвертый элемент", "Последний элемент")
'отображение первого элемента массива
MsgBox ar(LBound(ar))
'отображение последнего элемента массива
MsgBox ar(UBound(ar))
'отображение элементов массива с разделителем "‒"
MsgBox Join(ar, "-")
'разбиение указанного текста массива
tr = Split("Первый элемент-Второй элемент-Третий элемент-
Четвертый элемент-Последний элемент", "-")
отображение третьего по порядку элемента массива
MsgBox tr(2)
End Sub
Пример использования двумерного массива
Дана двумерная матрица ar(3,3). Определить количество отрицательных и положительных элементов массива.
Sub massiv()
49
Dim ar(3, 3) As Integer
p = 0
n = 0
‘ввод элементов массива
For i = 0 To 2
For j = 0 To 2
ar(i, j) = InputBox("Введите элемент массива") Worksheets("Лист1").Cells(i + 1, j + 1) = ar(i, j) Next
Next
‘анализ элементов массива
For i = 0 To 2
For j = 0 To 2
If ar(i, j) > 0 Then p = p + 1
Else
If ar(i, j) < 0 Then n = n + 1
End If
End If
Next
Next
‘вывод в ячейки таблицы соответствующей информации
Worksheets("Лист1").Cells(1, 5) = "Количество отрицательных
элементов ="
Worksheets(""Лист11").Cells(1, 9) = n
Worksheets(""Лист1").Cells(2, 5) = " Количество положительных
элементов ="
Worksheets(""Лист11").Cells(2, 9) = p
End Sub
50