- •Основы и принципы работы в vba
- •Часть 3 омск 2008
- •Часть 3
- •9.1. Теоретическая сведения
- •Dim a (100) As Integer
- •Программныйкод:
- •End Sub
- •9.2. Индивидуальные задания
- •10.1. Примеры выполнения работы
- •10.2. Индивидуальные задания
- •11.1. Теоретические сведения
- •11.1.1. Ввод двумерного массива
- •11.1.2. Вывод двумерного массива Выводится двумерный массив на рабочий лист Excel, программа, выполняющая данную операцию, выглядит следующим образом.
- •11.1.3. Преобразования двумерного массива
- •11.2. Индивидуальные задания
- •Часть 3
- •644046, Г. Омск, пр. Маркса, 35
10.1. Примеры выполнения работы
П р и м е р 1. Задан массив Х = (– 4; 8; – 6; 5; 8; 4). Удалить из массива Х элемент, стоящий на третьем месте, и сформировать новый массива A.
Алгоритм процедуры PR1 удаления элемента из массива с формированием нового массиваAпоказан на рис. 10.1. Программный код, в котором удаляется третий элемент массива Х с формированием нового массиваA, выглядит так:
Option Explicit
Sub PR1 ( )
Dim x(1 to 6) as As Integer, A(1 to 5) As Integer
Dim N As Integer, i As Integer
Dim k As Integer
k = 3 : n=6
For I=1 to n : x(I) = Val(Input Box("Вв. x")):Next I
Fori=kToN– 1 ‘начиная сk-го и до предпоследнего элемента
X(i) =X(i+ 1) ‘сдвигаем элементы массива влево
Nexti
Cells(3, 1) = "полученный массив"
Fori= 1toN- 1
A(i)=x(i) ‘с формированием массиваA
Cells(4, i) = A(i) ‘вывод массива
Nexti:EndSub
Удалениеодного элемента из одномерного массива происходит по следующей схеме:
1) указывается или определяется порядковый номер элемента, который необходимо удалить из массива;
2) все элементы, стоящие за удаляемым элементом, сдвигаются на одну позицию влево;
3) количество элементов уменьшается на единицу.
При вставкеодного элемента в массив необходимо сначала освободить место для вставляемого элемента, т. е. «раздвинуть» элементы, а затем вставить новый элемент в массив, увеличив массив на один элемент.
П р и м е р 2. Дан массив X= {–3; 2; 0; 6; –8; 12; 0; 5; 77}. После первого числа 0 вставить сумму всех элементов массива. Алгоритм вставки элемента массива процедурыPR2 представлен на рис. 10.2.
Программный код:
OptionExplicit
Sub PR2 ( )
Dim x(11) As Integer, i As Integer, a As Integer, n As Integer
Dimi0AsInteger‘ порядковый номер числа 0
s = 0: n = 10
For i = 1 To n
x(i) = Cells(1, i) ‘ ввод массива и
s = s + x(i) ‘ вычисление суммы элементов
Next i
Fori= 1Ton‘ поиск порядкового номера первого числа 0
If x(i) = 0 Then
i0 = i
Exit For ‘ выход из цикла
End If
Next i
For i = n + 1 To i0 + 1 Step –1 ‘ раздвигаем элементы массива
x(i) = x(i – 1)
Nexti
x(i0 + 1) = s ‘ вставка элемента равного сумме
Cells(3, 1) = "полученный массив"
Fori= 1ton+1 ‘ вывод полученного массива
Cells(4, i) = x(i)
Next i
EndSub
При раздвижке элементов массив приобретет следующий вид:
– 3 2 0 0 6 – 8 12 5 77.
После вставки суммы, получим массив:
– 3 2 0 14 6 – 8 12 5 77.
П р и м е р 3. Задан массив B из 30 целых чисел. Сформировать новый массив D из тех элементов исходного массива B, которые кратны своему индексу. Массив В ввести с помощью генератора случайных чисел в интервале [30; 80]. Исходный и результирующий массив распечатать на «Лист 1» рабочий книги в два столбца.
Особенностью этой задачи является то, что размер нового формируемого массива неизвестен и не может быть заранее определен, поэтому для обозначения индексов исходного и нового массивов вводят две независимые переменные –IиJ. Фрагмент алгоритма примера 3 представлен на рис. 10.3.
Программный код:
Option Explicit
Sub PR3()
Dim B(1 To 30) As Integer
Dim D(1 To 30) As Integer
Dim i As Integer, J As Integer
Randomize
For i = 1 To 30
B(i) = Int(Rnd * (80 – 30) + 30)
Cells(i, 1) = i: Cells(i, 2) = B(i)
Next i
J = 0
For i = 1 To 30
If B(i) Mod i = 0 Then J = J + 1 : D(J) = B(i)
Next i
For i = 1 To J
Cells(i, 3) = D(i)
Next i
EndSub