Что не так с функцией?
- Войдите на сайт для отправки комментариев
Чт, 08/11/2018 - 22:01
Всем привет! Я новичек в данной сфере, и уменя возникла проблема, которую я не могу понять.
Есть функция:
int avg(int val){ int sum = 0; for(int i=1;i<_LEN;i++){ ARR[i-1] = ARR[i]; sum += ARR[i-1]; } ARR[_LEN] = val; sum += val; return sum/_LEN; }
В setup я массив обнуляю:
for(int i = 0; i<_LEN; i++) ARR[i] = 0;
а объявляю его так:
const int _LEN = 6; int ARR[_LEN];
но почему то, передавая 6 раз 247 я кажды раз получаю 41 (деление)
Почему не собирается сумма?
Сделал отладочную функцию:
void mapArr(){ for(int i = 0; i<_LEN; i++){ Serial.print(ARR[i]); Serial.print(", "); } Serial.println(); }
но она мне возвращает 6 нулей :(
а что вы хотели, если вы сумму во второй строке функции каждый раз обнуляете?
Так я же ее потом из массива подтягиваю
что вы там подтягиваете? у вас в массиве вначале одни нули. То есть после цикла For у вас sum =0. Потом вы к нулю прибавляете val и делите на шесть... 247/6 = 41. все правильно
а. я понял, что вы пытались изобразить... скользящее среднее по ряду значений. У вас ошибка в строке 7 - в массиве индексы идут с нуля, поэтому элемента ARR[_LEN] в массиве не существует
По идее, первый раз функция должна вернуть как и положено 41, во второй раз 82, далее 123, 164, 205, 247.
Получается, что у меня что то не так с циклом, но я понять не могу, что именно.
а. я понял, что вы пытались изобразить... скользящее среднее по ряду значений. У вас ошибка в строке 7 - в массиве индексы идут с нуля, поэтому элемента ARR[_LEN] в массиве не существует
СПАСИБО! НЕ ДОПЕР СРАЗУ!