Написать программу в vba. заданы массивы а(40,40), в(20,20) и с(30,30).для каждого из заданных массивов определить количество элементов в строке превышающих среднее арифметическое значение элементов массива
Function Mean2(A As Variant) As Double 'Возвращает среднее арифметическое элементов двухмерного массива Dim i As Integer, j As Integer, S As Variant, n As Integer S = 0 For i = LBound(A, 1) To UBound(A, 1) For j = LBound(A, 2) To UBound(A, 2) S = S + A(i, j) Next j Next i n = (UBound(A, 1) - LBound(A, 1) + 1) * (UBound(A, 2) - LBound(A, 1) + 1) Mean2 = S / n End Function
Sub InitMas2(A As Variant, amin As Variant, amax As Variant) 'Инициализирует элементы двухмерного массива датчиком случайных чисел 'amin и amax задают диапазон часел для инициализации Dim i As Integer, j As Integer, typ As Integer, ik As Integer, rk As Single Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer imin = LBound(A, 1) imax = UBound(A, 1) jmin = LBound(A, 2) jmax = UBound(A, 2) typ = VarType(A) - 8192 Select Case typ Case 2, 3, 17 ik = Int(amax - amin + 1) For i = imin To imax For j = jmin To jmax A(i, j) = Int(Rnd * ik + amin) Next j Next i Case Else rk = amax - amin + 1 For i = imin To imax For j = jmin To jmax A(i, j) = Rnd * rk + amin Next j Next i End Select End Sub
Sub OutMas(A As Variant, prow As Integer, pcol As Integer) 'Размещает элементы одномерного массива на текущем листе рабочей книги 'Ячейка в левом верхнем углу имеет адрес (prow,pcol) 'Размещение идет по колонке Dim i As Integer, ic As Integer Dim imin As Integer, imax As Integer imin = LBound(A, 1) imax = UBound(A, 1) ic = prow For i = imin To imax Cells(ic, pcol).Value = A(i) ic = ic + 1 Next i End Sub
Sub OutMas2(A As Variant, prow As Integer, pcol As Integer) 'Размещает элементы двухмерного массива на текущем листе рабочей книги 'Ячейка в левом верхнем углу имеет адрес (prow,pcol) Dim i As Integer, j As Integer, ic As Integer, jc As Integer Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer imin = LBound(A, 1) imax = UBound(A, 1) jmin = LBound(A, 2) jmax = UBound(A, 2) ic = prow For i = imin To imax jc = pcol For j = jmin To jmax Cells(ic, jc).Value = A(i, j) jc = jc + 1 Next j ic = ic + 1 Next i End Sub
Sub NumElems2(A As Variant, B() As Integer, pm As Double) ' Находит в каждой строке двухмерного массива а количество элементов, ' превышающих среднее арифметическое всех элементов этого массива pm ' и помещает это количство в одномерный массив b. Dim i As Integer, j As Integer, kol As Integer Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer imin = LBound(A, 1) imax = UBound(A, 1) jmin = LBound(A, 2) jmax = UBound(A, 2) For i = imin To imax kol = 0 For j = jmin To jmax If A(i, j) > pm Then kol = kol + 1 Next j B(i) = kol Next i End Sub
Sub main() Const m = 40, n = 20, p = 30 Dim A(1 To m, 1 To m) As Integer, R(1 To m) As Integer Dim B(1 To n, 1 To n) As Single, S(1 To n) As Integer Dim C(1 To p, 1 To p) As Integer, T(1 To p) As Integer Dim i As Integer, mm As Double Randomize Timer InitMas2 A, -1000, 1000 OutMas2 A, 1, 1 mm = Mean2(A) NumElems2 A, R, mm OutMas R, 1, m + 2
InitMas2 B, 0, 1800 OutMas2 B, 42, 1 mm = Mean2(B) NumElems2 B, S, mm OutMas S, 42, n + 2
InitMas2 C, -1200, 800 OutMas2 C, 63, 1 mm = Mean2(C) NumElems2 C, T, mm OutMas T, 63, p + 2 End Sub
Особенность программы: позволяет работать с массивами любых допустимых числовых типов. Размер массивов фактически ограничен только размером свободной оперативной памяти компьютера.
Для запуска не забудьте разрешить исполнение макросы на уровне безопасности не выше "Средний" и дать доверенный доступ к проектам VBA.
Function Mean2(A As Variant) As Double
'Возвращает среднее арифметическое элементов двухмерного массива
Dim i As Integer, j As Integer, S As Variant, n As Integer
S = 0
For i = LBound(A, 1) To UBound(A, 1)
For j = LBound(A, 2) To UBound(A, 2)
S = S + A(i, j)
Next j
Next i
n = (UBound(A, 1) - LBound(A, 1) + 1) * (UBound(A, 2) - LBound(A, 1) + 1)
Mean2 = S / n
End Function
Sub InitMas2(A As Variant, amin As Variant, amax As Variant)
'Инициализирует элементы двухмерного массива датчиком случайных чисел
'amin и amax задают диапазон часел для инициализации
Dim i As Integer, j As Integer, typ As Integer, ik As Integer, rk As Single
Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
imin = LBound(A, 1)
imax = UBound(A, 1)
jmin = LBound(A, 2)
jmax = UBound(A, 2)
typ = VarType(A) - 8192
Select Case typ
Case 2, 3, 17
ik = Int(amax - amin + 1)
For i = imin To imax
For j = jmin To jmax
A(i, j) = Int(Rnd * ik + amin)
Next j
Next i
Case Else
rk = amax - amin + 1
For i = imin To imax
For j = jmin To jmax
A(i, j) = Rnd * rk + amin
Next j
Next i
End Select
End Sub
Sub OutMas(A As Variant, prow As Integer, pcol As Integer)
'Размещает элементы одномерного массива на текущем листе рабочей книги
'Ячейка в левом верхнем углу имеет адрес (prow,pcol)
'Размещение идет по колонке
Dim i As Integer, ic As Integer
Dim imin As Integer, imax As Integer
imin = LBound(A, 1)
imax = UBound(A, 1)
ic = prow
For i = imin To imax
Cells(ic, pcol).Value = A(i)
ic = ic + 1
Next i
End Sub
Sub OutMas2(A As Variant, prow As Integer, pcol As Integer)
'Размещает элементы двухмерного массива на текущем листе рабочей книги
'Ячейка в левом верхнем углу имеет адрес (prow,pcol)
Dim i As Integer, j As Integer, ic As Integer, jc As Integer
Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
imin = LBound(A, 1)
imax = UBound(A, 1)
jmin = LBound(A, 2)
jmax = UBound(A, 2)
ic = prow
For i = imin To imax
jc = pcol
For j = jmin To jmax
Cells(ic, jc).Value = A(i, j)
jc = jc + 1
Next j
ic = ic + 1
Next i
End Sub
Sub NumElems2(A As Variant, B() As Integer, pm As Double)
' Находит в каждой строке двухмерного массива а количество элементов,
' превышающих среднее арифметическое всех элементов этого массива pm
' и помещает это количство в одномерный массив b.
Dim i As Integer, j As Integer, kol As Integer
Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
imin = LBound(A, 1)
imax = UBound(A, 1)
jmin = LBound(A, 2)
jmax = UBound(A, 2)
For i = imin To imax
kol = 0
For j = jmin To jmax
If A(i, j) > pm Then kol = kol + 1
Next j
B(i) = kol
Next i
End Sub
Sub main()
Const m = 40, n = 20, p = 30
Dim A(1 To m, 1 To m) As Integer, R(1 To m) As Integer
Dim B(1 To n, 1 To n) As Single, S(1 To n) As Integer
Dim C(1 To p, 1 To p) As Integer, T(1 To p) As Integer
Dim i As Integer, mm As Double
Randomize Timer
InitMas2 A, -1000, 1000
OutMas2 A, 1, 1
mm = Mean2(A)
NumElems2 A, R, mm
OutMas R, 1, m + 2
InitMas2 B, 0, 1800
OutMas2 B, 42, 1
mm = Mean2(B)
NumElems2 B, S, mm
OutMas S, 42, n + 2
InitMas2 C, -1200, 800
OutMas2 C, 63, 1
mm = Mean2(C)
NumElems2 C, T, mm
OutMas T, 63, p + 2
End Sub
Особенность программы: позволяет работать с массивами любых допустимых числовых типов. Размер массивов фактически ограничен только размером свободной оперативной памяти компьютера.
Для запуска не забудьте разрешить исполнение макросы на уровне безопасности не выше "Средний" и дать доверенный доступ к проектам VBA.