Что не так с функцией?
- Войдите на сайт для отправки комментариев
Чт, 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] в массиве не существует
int sum = 0; //Обнулить общую сумму // сместить массив влево for(int i=1;i<_LEN;i++){ // запуск цикла со второго элемента ARR[i-1] = ARR[i]; //предыдущему элементу массива присваивается знач. тек. элемента sum = sum + ARR[i-1];//прибавить к сумме тек. значение. } ARR[_LEN] = val; // последний элемент массива установить в передаваемое значениеПо идее, первый раз функция должна вернуть как и положено 41, во второй раз 82, далее 123, 164, 205, 247.
Получается, что у меня что то не так с циклом, но я понять не могу, что именно.
а. я понял, что вы пытались изобразить... скользящее среднее по ряду значений. У вас ошибка в строке 7 - в массиве индексы идут с нуля, поэтому элемента ARR[_LEN] в массиве не существует
СПАСИБО! НЕ ДОПЕР СРАЗУ!