-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 が初期化されていないという警告が表示されることです。小さな調査を行ったところ、変数が初期化されていない場合、C++ のデフォルトで null 値またはゼロ値を格納しないことがわかりました。

temp1 = 0 として行をコードに入れることはできません。その値は、次の反復で temp2 変数に渡されるために必要になるためです。どちらも移動平均を計算するために必要です。

したがって、基本的に、これは上記の手順が初めて機能する問題です。それを乗り越えれば、移動平均の計算には上記のロジックで十分だからです。皆さんはどう思いますか?

前もって感謝します。

4

1 に答える 1

2

最も簡単な解決策は、シーケンスの最初の値で変数を初期化することです。

int prev = getValue();

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

シーケンスに少なくとも 1 つの値があると仮定したことに注意してください。最初の値を取得する前に、それが実際に存在することを確認する必要がある場合があります。

于 2013-04-25T08:23:38.553 に答える