Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 01:39   #1
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию Цикл в цикле

Есть массив, 30 цифр записанных в столбец. Как с помошью макроса посчитать срднее значение, но не всего массива а только каждого третьего значения умноженного на 2. На мой взгляд там должен быть цикл в цикле, мне кажется что у меня не получается правильно перейти от первого цикла ко второму...
drNabla вне форума Ответить с цитированием
Старый 30.11.2010, 02:02   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

s = 0
for i =1 to 10
s = s + cells(i*3,1)
next
sr = s/10
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.11.2010, 14:38   #3
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

а если надо взять среднее трёх значений, а потом усреднить все тройки? просто мне надо понять как цикл в цикле работает.
drNabla вне форума Ответить с цитированием
Старый 30.11.2010, 15:07   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

итак, у нас выборка из 30 элементов (э1,э2,э3 ... э30)
находим среднее для каждых 3-х последовательных. с31 = (э1+э2+э3)/3, с32=(э4+э5+э6)/3, с33 ... с310 = (э28+э29+э30)/3.
если вы думаете, что среднее значение полученное для этих 10 средних будет чем-то отличаться для среднего значения по всей выборке - то Вы глубоко ошибаетесь.
работа цикла внутри цикла ничем не отличается от работы цикла внутри процедуры, извините, но что тут можно не понять - вот этого уже я не понимаю.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.11.2010, 15:55   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что-то я тоже не понял, при чём тут цикл в цикле... Это когда нужно сравнить два массива - каждый элемент с каждым элементом.
А тут (для каждого третьего значения умноженного на 2) нужен цикл с шагом 3, суммируем x=x+value*2 и считаем шаги. Потом делим сумму на шаги.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.11.2010, 16:05   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в учебных целях, цикл в цикле как заказывали. (в колонку А в первых 30 ячееек напишите каких-то чисел, для порядка)
Код:
s1 = 0
for r = 1 to 30 step 3
  s3 = 0
  for dr = 0 to 2
    s3 = s3 + cells(r+dr,1)
  next
  s1 = s1+s3/3
next
msgbox "Среднее = " & s1/10, vbokonly, ""
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 30.11.2010 в 16:08.
IgorGO вне форума Ответить с цитированием
Старый 30.11.2010, 16:24   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Тогда код по первой задаче, с одним циклом:
Код:
Sub tt()
shag = 0
For i = 1 To 30 Step 3
  shag = shag + 1
    s = s + Cells(i, 1) * 2
Next
MsgBox "Среднее = " & s / shag, vbOKOnly, ""
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.12.2010, 23:01   #8
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
в учебных целях, цикл в цикле как заказывали. (в колонку А в первых 30 ячееек напишите каких-то чисел, для порядка)
Код:
s1 = 0
for r = 1 to 30 step 3
  s3 = 0
  for dr = 0 to 2
    s3 = s3 + cells(r+dr,1)
  next
  s1 = s1+s3/3
next
msgbox "Среднее = " & s1/10, vbokonly, ""

Вот это то что мне нужно было! большое спасибо, а то после ваших предыдущих слов у меня вроде как получилось но вот щас оказалось что неправильно.
drNabla вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
счётчик (цикл в цикле) PARTOS Microsoft Office Excel 3 26.10.2010 21:13
Цикл в цикле SkyL1ne Помощь студентам 7 02.04.2010 07:36
цикл в цикле (Си++) ConChita Помощь студентам 2 11.03.2010 09:13
Цикл в цикле... Davlet M Помощь студентам 6 25.01.2010 01:42