Среднее арифметическое в строке с отрицательным элементом - VBA

Узнай цену своей работы

Формулировка задачи:

Всем привет Вроде почти все допилил, а на выходе какая-то ересь, подскажите, что не так Условие задачи: дана матрица Z(5,4). Если в строке есть отрицательный элемент, найти среднее арифметическое ненулевых элементов этой строки и вывести эти значения в отдельный массив. Что есть: исходная матрица и массив с переопределением размерности в ходе программы.
Листинг программы
  1. Option Base 1
  2. Sub Lab()
  3. Cells.Clear
  4. Dim Z(5, 4) As Integer
  5. Dim P() As Integer
  6. Dim i, j, k, x, l, n, t, sum As Integer
  7. Dim Check As Boolean
  8. For i = 1 To 5
  9. For j = 1 To 4
  10. Randomize
  11. Z(i, j) = Int(20 * Rnd - 10)
  12. Cells(i, j) = Z(i, j)
  13. Next j
  14. Next i
  15. k = 0
  16. For i = 1 To 5
  17. sum = 0
  18. Check = False
  19. For j = 1 To 4
  20. If Z(i, j) < 0 Then
  21. Check = True
  22. End If
  23. Next j
  24. If Check Then
  25. k = k + 1
  26. ReDim Preserve P(k)
  27. For n = 1 To k
  28. For j = 1 To 4
  29. If Z(i, j) <> 0 Then
  30. sum = sum + Z(i, j)
  31. x = x + 1
  32. End If
  33. Next j
  34. l = sum / x
  35. P(n) = l
  36. Cells(n, 6) = P(n)
  37. Next n
  38. End If
  39. Next i
  40. End Sub
Я так понял, выполняя код, программа в каждый элемент массива записывает среднее арифметическое элементов всей матрицы.

Решение задачи: «Среднее арифметическое в строке с отрицательным элементом»

textual
Листинг программы
  1. Sub test()
  2.    
  3.     Dim Z As Variant
  4.     Dim isExist As Boolean
  5.     Dim result() As Variant
  6.     Dim cnt As Integer
  7.     Dim srZ As Variant
  8.     Dim n As Integer
  9.    
  10.     ReDim Z(1 To 5, 1 To 4)
  11.    
  12.     For i = 1 To 5
  13.         For j = 1 To 4
  14.             Randomize
  15.             Z(i, j) = Int(20 * Rnd - 10)
  16.         Next j
  17.     Next i
  18.    
  19.     Range(Range("A1"), Range("A1").Offset(UBound(Z) - 1, UBound(Z, 2) - 1)) = Z
  20.    
  21.    
  22.     For i = 1 To 5
  23.         isExist = False
  24.         cnt = 0
  25.         srZ = 0
  26.         For j = 1 To 4
  27.             If Z(i, j) <> 0 Then
  28.                 srZ = srZ + Z(i, j)
  29.                 cnt = cnt + 1
  30.             End If
  31.             If Z(i, j) < 0 Then
  32.                 isExist = True
  33.             End If
  34.         Next j
  35.        
  36.         If isExist Then
  37.             n = n + 1
  38.             ReDim Preserve result(1 To n)
  39.             result(n) = srZ / cnt
  40.         End If
  41.     Next i
  42.    
  43.     Range(Range("F1"), Range("F1").Offset(UBound(result) - 1, 0)) = WorksheetFunction.Transpose(result)
  44.    
  45. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы