Что не так с функцией?

ermek6
Offline
Зарегистрирован: 08.11.2018

Всем привет! Я новичек в данной сфере, и уменя возникла проблема, которую я не могу понять.

Есть функция: 

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 нулей :(

b707
Offline
Зарегистрирован: 26.05.2017

а что вы хотели, если вы сумму во второй строке функции каждый раз обнуляете?

ermek6
Offline
Зарегистрирован: 08.11.2018

Так я же ее потом из массива подтягиваю

b707
Offline
Зарегистрирован: 26.05.2017

что вы там подтягиваете? у вас в массиве вначале одни нули. То есть после цикла For у вас sum =0. Потом вы к нулю прибавляете val и делите на шесть... 247/6 = 41. все правильно

 

b707
Offline
Зарегистрирован: 26.05.2017

а. я понял, что вы пытались изобразить... скользящее среднее по ряду значений. У вас ошибка в строке 7 - в массиве индексы идут с нуля, поэтому элемента ARR[_LEN] в массиве не существует

ermek6
Offline
Зарегистрирован: 08.11.2018
  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.

Получается, что у меня что то не так с циклом, но я понять не могу, что именно.

ermek6
Offline
Зарегистрирован: 08.11.2018

b707 пишет:

а. я понял, что вы пытались изобразить... скользящее среднее по ряду значений. У вас ошибка в строке 7 - в массиве индексы идут с нуля, поэтому элемента ARR[_LEN] в массиве не существует

 

СПАСИБО! НЕ ДОПЕР СРАЗУ!