Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Проблема с ср. значением Добавлено: 11.02.09 21:17  

Автор вопроса:  Incognito
Задание такое: Вычислить сумму элементов массива, которые меньше средрего значения.

Сумма вычисляется так :

Public Function My_Sum(N As Integer)
 Dim A(10) As Single
 Dim Sum As Single, i As Integer
 Sum = 0
For i = 1 To N
A(i) = Cells(i + 1, 1).Value
Sum = Sum + A(i)
Next i
My_Sum = Sum
End Function

Ср.значение :
Public Function My_Average(N As Integer)
 Dim A(10) As Single
 Dim Sum As Single, i As Integer
 Sum = 0
For i = 1 To N
A(i) = Cells(i + 1, 1).Value
Sum = Sum + A(i)
Next i
My_Average = Sum / N
End Function

а как это всё совместить и добавить If .... ????

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 11.02.09 22:43
  1. Console.WriteLine(A.Where(Function (n) n < A.Avg()).Sum())

Ответить

Номер ответа: 2
Автор ответа:
 Incognito



Вопросов: 5
Ответов: 25
 Профиль | | #2 Добавлено: 11.02.09 23:04
ээ..честно я не понял, куда это вставлять и что с этим сделать?
мне надо, чтобы в 1 функции было то что я ищу СУММУ < ср. арифм.

Ответить

Номер ответа: 3
Автор ответа:
 Incognito



Вопросов: 5
Ответов: 25
 Профиль | | #3 Добавлено: 11.02.09 23:05
Public Function My_Average(N As Integer)
Dim A(10) As Single
Dim Sum As Single, i As Integer
Sum = 0
For i = 1 To N
A(i) = Cells(i + 1, 1).Value
Sum = Sum + A(i)
Next i
My_Average = Sum / N
For i=1 to N
IF A(i)>=My_Average then
A(i) = Cells(i + 1, 1).Value
Sum = Sum + A(i)
end if
Next i
End Function

Вот функция, но она вычисляет только ср. арифм чисел

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 11.02.09 23:51
Она вычисляет все что вам требуется, чем она вас не устраивает?

Разве что вы забыли обнулить сумму перед вторым циклом.

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 12.02.09 01:41
Console.WriteLine(A.Where(Function (n) n < A.Avg()).Sum())

аффтар, пеши исчо! ))))))))
для VBA это самый актуальный пример!!!
LINQ for VBA это что то новенькое ))

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 12.02.09 07:33
Brand, у тебя Avg будет для каждого элемента вычисляться, получится сложность O(N^2) :)
Вот верное решение за O(N):
  1. int s = accumulate(a.begin(), remove_if(a.begin(), a.end(), bind2nd(less<int>(), (double) accumulate(a.begin(), a.end(), 0) / a.size())), 0);

Ответить

Номер ответа: 7
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #7 Добавлено: 12.02.09 08:11
  1. Public Function My_Average(N As Integer)
  2. 'Dim A(10) As Single 'почему 10
  3. Dim A() As Single
  4. ReDim A(N)
  5. Dim Sum As Single, i As Integer
  6. Dim Sum2 As Single
  7. For i = 1 To N
  8.   A(i) = Cells(i + 1, 1).Value
  9.   Sum = Sum + A(i)
  10. Next i
  11. Sum = Sum / N
  12. 'My_Average = Sum / N'???????????
  13. For i = 1 To N
  14.   If A(i) < Sum Then
  15.     'A(i) = Cells(i + 1, 1).Value'зачем, если A(i)забито в предыдущем цикле?
  16.     Sum2 = Sum2 + A(i)
  17.   End If
  18. Next i
  19. My_Average = Sum2 '!!!!!!!!!!
  20. End Function
  21.  
  22. Sub My_Average_Example()
  23.  Debug.Print My_Average(10)
  24. End Sub

Ответить

Номер ответа: 8
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #8 Добавлено: 12.02.09 08:43
  1. Public Function My_SumItemsLessAverage(my_Range As Range)
  2. Dim Aver As Double, I As Long, Sum As Double
  3. Aver = Application.WorksheetFunction.Average(my_Range)
  4. For I = 1 To my_Range.Count
  5.   If my_Range(I) < Aver Then
  6.     Sum = Sum + my_Range(I)
  7.   End If
  8. Next I
  9. My_SumItemsLessAverage = Sum
  10. End Function
  11.  
  12. Sub My_SumItemsLessAverage_Example()
  13.  Debug.Print My_SumItemsLessAverage(Selection)
  14.  Debug.Print My_SumItemsLessAverage(ActiveSheet.UsedRange)
  15. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 12.02.09 12:14
Sharp, у меня была мысль на этот счет но почему-то не посчитал нужным перепроверить :)

Ответить

Номер ответа: 10
Автор ответа:
 Incognito



Вопросов: 5
Ответов: 25
 Профиль | | #10 Добавлено: 12.02.09 18:53
Dim A(10) As Single 'почему 10 - Потому что чисел 10...
My_Average = Sum / N'??????????? - это СУММА ВСЕХ ЧИСЕЛ делится на 10 и находится их среднее значение
'A(i) = Cells(i + 1, 1).Value'зачем, если A(i)забито в предыдущем цикле? - эээ..не знаю...)


Народ, мне нужно найти СУММУ, которая меньше СРЕДНЕГО ЧИСЛА...как это всё воссоединить и добавить ещё что?:)
И тут не надо замудренное что-то...)) потому что из последнего очень много чего я не понимаю...

Ответить

Номер ответа: 11
Автор ответа:
 Incognito



Вопросов: 5
Ответов: 25
 Профиль | | #11 Добавлено: 12.02.09 18:54
 fAndOrIn .... АААААААААА.....огромное спасибо, всё работает))))

Ответить

Номер ответа: 12
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #12 Добавлено: 12.02.09 19:31
всего-то надо было! первое
СПАСИБО
надо отметить! А ведь от некоторых не дождешся...
афтары, имейте ввиду.

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 13.02.09 03:55
Я че-то не понял, до сих пор не смогли решить эту архисложную задачу? О_О

Ответить

Номер ответа: 14
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #14 Добавлено: 13.02.09 07:44
Вниманию присутствующих! Отвечая на вопрос (по-моему) следует следить за темой этого вопроса(VBA в конкретном примере)!
Ответ типа
Console.WriteLine(A.Where(Function (n) n < A.Avg()).Sum())
может зациклить...
Я че-то не понял, до сих пор не смогли решить эту архисложную задачу? О_О
Мне показалось, что задача решена.(точка)

Ответить

Номер ответа: 15
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #15 Добавлено: 13.02.09 08:28
ыыы
aspx?id=176628

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам