Написать программу в 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.