Из данной матрицы построить новую матрицу, по среднему арифметическому соседей - VBA
Формулировка задачи:
Друзья нужна ваша помощь, в общем задача такая. У каждого элемента есть соседи у некоторых слева, справа, снизу, сверху у некоторых только справа и снизу, в общем нужно обновить каждый элемент матрицы по среднему арифметическому его соседей.
написал вот так вот, почему то работает не правильно!
Листинг программы
- Sub Matrix()
- Dim i As Byte, j As Byte
- Dim M() As Single, arf As Single, k As Single, n As Integer, b As Integer
- Dim s As String
- k = 0
- n = InputBox("Введите количество строк: ")
- b = InputBox("Введите количество столбцов: ")
- ReDim M(n, b)
- For i = 1 To n
- For j = 1 To b
- M(i, j) = InputBox("x(" & i & ", " & j & ")")
- Next
- Next
- For i = 1 To n
- For j = 1 To b
- If i - 1 > 0 Then
- arf = arf + M(i - 1, j)
- k = k + 1
- End If
- If j - 1 > 0 Then
- arf = arf + M(i, j - 1)
- k = k + 1
- End If
- If i + 1 <= n Then
- arf = arf + M(i + 1, j)
- k = k + 1
- End If
- If j + 1 <= b Then
- arf = arf + M(i, j + 1)
- k = k + 1
- End If
- M(i, j) = arf / k
- k = 0
- arf = 0
- Next
- Next
- For i = 1 To n
- For j = 1 To b
- MsgBox (M(i, j))
- Next
- Next
- End Sub
Решение задачи: «Из данной матрицы построить новую матрицу, по среднему арифметическому соседей»
textual
Листинг программы
- Sub Matrix()
- Dim i As Long, j As Long
- Dim arf As Double, k As Long, n As Long, b As Long
- n = InputBox("Введите количество строк: ", , 4)
- b = InputBox("Введите количество столбцов: ", , 3)
- ReDim M(1 To n, 1 To b) As Double, X(1 To n, 1 To b) As Double
- For i = 1 To n
- For j = 1 To b
- M(i, j) = InputBox("x(" & i & ", " & j & ")", , Round(Rnd * 10, 1))
- Next
- Next
- On Error Resume Next
- For i = 1 To n
- For j = 1 To b
- arf = arf + M(i - 1, j)
- If Err Then Err.Clear Else k = k + 1
- arf = arf + M(i, j - 1)
- If Err Then Err.Clear Else k = k + 1
- arf = arf + M(i + 1, j)
- If Err Then Err.Clear Else k = k + 1
- arf = arf + M(i, j + 1)
- If Err Then Err.Clear Else k = k + 1
- X(i, j) = arf / k
- k = 0
- arf = 0
- Next
- Next
- 'вывод на лист Excel
- Cells(1, 1).Resize(n, b).Value = M
- Cells(n + 2, 1).Resize(n, b).Value = X
- 'For i = 1 To n
- ' For j = 1 To b
- ' MsgBox (M(i, j))
- ' Next
- 'Next
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д