Способы обработки массивов
1. Нахождение суммы, произведения, среднего арифметического, среднего геометрического элементов массива.
1.1 Нахождение суммы элементов массива.
Sub prim6()
Dim a(10), S As String, i, sum
n = Val(InputBox("введите количество элементов массива n:"))
For i = 0 To 9
a(i) = Int(Rnd * 100) + 1
sum = sum + a(i)
S = S & str(a(i)) & " "
Next i
MsgBox S & Chr(10) & Chr(13) & "sum=" & sum
End Sub
1.2 Нахождение суммы четных и нечетных элементов массива.
Sub prim7()
Dim a(4), S As String, i, sumchet, sumnechet
sumchet = 0
sumnechet = 0
For i = 0 To 3
a(i) = Int((Rnd * 100) + 1)
If a(i) Mod 2 = 0 Then sumchet = sumchet + a(i)
If a(i) Mod 2 <> 0 Then sumnechet = sumnechet + a(i)
S= S & str(a(i)) & " "
Next i
MsgBox S & Chr(10) & Chr(13) & _
"sumchet=" & sumchet & "sumnechet=" & sumnechet
End Sub
1.3 Нахождение суммы элементов массива, значения которых находятся в интервале от 50 до 100.
Sub prim8()
Dim a(4), S As String , i, sum
sum = 0
For i = 0 To 3
a(i) = Int(Rnd * 100) + 1
If a(i) >= 50 And a(i) <= 100 Then sum = sum + a(i)
S= S & str(a(i)) & " "
Next i
MsgBox S & Chr(10) & Chr(13) & _
"sum=" & sum
End Sub
1.4 Нахождение суммы элементов массива с четными индексами и суммы элементов массива с нечетными индексами.
Sub prim9()
Dim a(4), S As String , i, sum1, sum2
sum1 = 0
sum2 = 0
For i = 0 To 3
a(i) = Int(Rnd * 100) + 1
If i Mod 2 = 0 Then sum1 = sum1 + a(i)
If i Mod 2 <> 0 Then sum2 = sum2 + a(i)
S= S & str(a(i)) & " "
Next i
MsgBox S & Chr(10) & Chr(13) & _
"sum1=" & sum1 & "sum2=" & sum2
End Sub
1.4 Нахождение суммы индексов четных элементов и произведения индексов нечетных элементов массива. Начальное значение произведения надо задавать равным 1.
Sub prim11()
Dim a(1 To 4), S As String, i, sum, pr
pr = 1
sum = 0
For i = 1 To 4
a(i) = Int(Rnd * 100) + 1
If a(i) Mod 2 = 0 Then sum = sum + i
If a(i) Mod 2 <> 0 Then pr = pr * i
S= S & str(a(i)) & " "
Next i
MsgBox S & Chr(10) & Chr(13) & _
"sum=" & sum & "pr=" & pr
End Sub
2.Нахождение произведения и среднего геометрического элементов массива.
1.1 Нахождение среднего арифметического и среднего геометрического элементов массива.
Sub prim12()
Dim a(4), S As String, i, sum, pr
pr = 1
For i = 0 To 3
a(i) = Int(Rnd * 100) + 1
sum = sum + a(i)
pr = pr * a(i)
S= S & str(a(i)) & " "
Next i
sa = sum / 5: sg = pr * (1 / 5)
MsgBox S & Chr(10) & Chr(13) & _
"sa=" & sa & "sg=" & sg
End Sub
3 Обработка элементов массива.
3.1 Нахождение максимального и минимального элементов массива и обмен их местами.
Sub prim15()
Dim a(4), str_a, i, str_anew, max, min, imax, imin
For i = 0 To 3
a(i) = Int(Rnd * 100) + 1
str_a = str_a & a(i) & " "
Next i
max = a(0): imax = 0: min = a(0): imin = 0
For i = 1 To 3
If a(i) > max Then max = a(i): imax = i
If a(i) < min Then min = a(i): imin = i
Next i
a(imax) = min: a(imin) = max
For i = 0 To 4
str_anew = str_anew & a(i) & " "
Next i
MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _
"max=" & max & "imax=" & imax & Chr(10) & Chr(13) & _
"min=" & min & "imin=" & imin & Chr(10) & Chr(13) & _
"новый массив:" & str_anew
End Sub
3.2 Подсчет количества элементов массива, например больших 50.
Sub prim17()
Dim a(4), str_a, i, k
k = 0
For i = 0 To 3
a(i) = Int(Rnd * 100) + 1
str_a = str_a & a(i) & " "
If a(i) > 50 Then k = k + 1
Next i
MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _
"k=" & k
End Sub
3.3 Обработка двух массивов.
Заданы два массива a(4) и b(4) заполнить их случайными значениями и поменять местами четвертые элементы массивов.
Sub prim16()
Dim a(1 To 4), b(1 To 4), str_a, str_b, i, str_anew, str_bnew, buf
For i = 1 To 4
a(i) = Int(Rnd * 100) + 1
str_a = str_a & a(i) & " "
b(i) = Int(Rnd * 10) + 1
str_b = str_b & b(i) & " "
Next i
buf = a(4)
a(4) = b(4)
b(4) = buf
For i = 1 To 4
str_anew = str_anew & a(i) & " "
str_bnew = str_bnew & b(i) & " "
Next i
MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _
"исходный массив b:" & str_b & Chr(10) & Chr(13) & _
"новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _
"новый массив b:" & str_bnew
End Sub
3.3 Обработка элементов массива в блоках разветвления и циклов.
Структура программы:
1. Заголовок.
2. Описание переменных.
3. Ввод элементов массива (или массивов).
4. Условие.
5. Инструкции, если Условие выполняется.
6. Инструкции, если Условие не выполняется.
7. Вывод результата.
Пример: Заданы два массива a(4) и b(4), если количество отрицательных элементов массива a(4) больше количества отрицательных массива b(4), то положительные элементы массива a(4) заменить на 1, а положительные элементы массива b(4) заменить на нули.
Sub prim18()
Dim a(4), b(4), str_a, str_b, i, str_anew, str_bnew, k, t, sum, pr
k = 0: t = 0: pr = 1
For i = 0 To 3
a(i) = Int(Rnd * 100) - 50
str_a = str_a & a(i) & " "
b(i) = Int(Rnd * 10) - 5
str_b = str_b & b(i) & " "
If a(i) < 0 Then k = k + 1
If b(i) < 0 Then t = t + 1
Next i
If k > t Then
For i = 0 To 3
If a(i) > 0 Then a(i) = 1
If b(i) > 0 Then b(i) = 0
str_anew = str_anew & a(i) & " "
str_bnew = str_bnew & b(i) & " "
Next i
MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _
"исходный массив b:" & str_b & Chr(10) & Chr(13) & _
"новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _
"новый массив b:" & str_bnew & imin & Chr(10) & Chr(13) & _
"k=" & k & "t=" & t
Else
For i = 0 To 3
sum = sum + a(i): pr = pr * b(i)
Next i
MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _
"исходный массив b:" & str_b & Chr(10) & Chr(13) & _
"sum=" & sum & "pr=" & pr & Chr(10) & Chr(13) & _
"k=" & k & "t=" & t
End If
End Sub
3.4 Просмотр диапазона ячеек рабочего листа с помощью объекта Sheets (рабочие листы) и метода Range для доступа к ячейкам.
Пример. Написать программу для заполнения ячеек рабочего листа и вывести общую сумму.
Sub pr61()
Dim i, n, x, sum, str_x As String
n = Val(InputBox("введите n:"))
i = 1: sum = 0
For i = 1 To n
x = Int(Rnd * 100) + 1
str_x = str_x & x & " "
sum = sum + x
Sheets("лист 1").Cells(i, 3).Value = x
Sheets("лист 1").Cells(5, 4) = sum
Next i
End Sub
3.5 Заполнение элементов массива значениями рабочего листа.
Sub pr()
Dim i As Integer,mass(), str_mass 'переменная для элементов массива
ReDim mass(10)
For i = 1 To 10
Sheets("лист1").Cells(1, i).Value = Int(100 * Rnd + 1)
mass(i) = Sheets("лист1").Cells(1, i).Value
str_mass = str_mass & mass(i) & " " 'накопление элементов массива для ‘вывода заполненных значений
Next i
MsgBox str_mass
End Sub
(1,i) – первая цифра строка, вторая столбец.