2013-04-25 6 views
-3

То, что я пытаюсь достичь в следующем коде, - найти скользящую среднюю;неинициализированная переменная в скользящем среднем вычислении

int slots = int ((sr+e)/mst); // finding number of slots 


int temp2; 
int temp1; 

if (temp1 == null) 
{ 
temp2 = 0; 
} 

temp2=temp1; // previously found number of slots 
temp1=slots; // presently found number of slots 
double mov_avg = (temp2+temp1)/2; //moving average 

Проблема в том, когда я скомпилирую, я получаю предупреждение о том, что temp1 не инициализирован; после небольшого исследования я обнаружил, что переменные не сохраняют значение null или нулевое значение по умолчанию в C++, когда оно не инициализировано;

Я не могу поместить строку как temp1 = 0 в код, так как ее значение будет необходимо для последующей передачи в переменную temp2; оба из которых потребуются для вычисления скользящей средней.

Итак, в основном это проблема для первого срабатывания описанной выше процедуры; потому что, если вы пройдете мимо него, вышеуказанной логики будет достаточно для вычисления скользящего среднего. Ребята, что вы думаете?

Заранее спасибо.

+0

Похоже, вы можете сделать это намного проще, просто имея значение 'value = (value + nextitem)/2;' на каждой итерации. –

+0

@ KerrekSB: Я не думаю, что это правильно. Возьмем следующий образец: '90; 10; 0'. Скользящие средние по двум значениям будут '50; 5' будет ли ваша формула давать' 50; 25'. Или я что-то пропустил? –

+0

Если вы уже ожидали, что переменные по умолчанию будут инициализированы до нуля, почему вы не можете сделать это вручную и получить тот же эффект? Нет смысла не инициализировать их до того, как они будут использованы, поскольку поведение не определено. 'int temp1 = 0;' –

ответ

2

Самое простое решение для инициализации переменной с первым значением вашей последовательности:

int prev = getValue(); 

while (valuesAvailable()) 
{ 
    int next = getValue(); 
    double moving_average = (prev + next)/2.; 
    // use moving_average 
    prev = next; 
} 

Обратите внимание, что я предположил, что существует по крайней мере одно значение в вашей последовательности: вам может понадобиться сделать проверку перед получив первое значение, чтобы убедиться, что оно на самом деле там.