2011/06/07

思い込みとは恐ろしいもので・・■■■

ArrayResize関数について、勘違いをしてましたので記録しておきます。

【サンプルコード】

以下の様なサンプルコードを作成しました。
void OnStart()
  {
    double k[];
   int     count;
   double    sum;
   for(int i=1 ;i<10;i++){
      ArrayResize(k,i);
      k[i-1] = i;
      count = ArraySize(k);
      sum=0;
      for(int q=0;q<count;q++)sum += k[q];
      Print("No= ",i," sum = ",sum);
   }   
  }

【勘違いしていた脳内処理】

脳内処理では、以下の様になると思い込んでいました。
No sum 脳内処理過程(E= EMPTY_VALUE)
1 1 k[0]=1
2 2 (k[0]=E)+(k[1]=2)=2
3 3 (k[0]=E)+(k[1]=E)+(k[2]=3)=3
4 4 (k[0]=E)+(k[1]=E)+(k[2]=E)+(K[3]=4)=4
5 5 (k[0]=E)+(k[1]=E)+(k[2]=E)+(K[3]=E)+(K[4]=5)=5
6 6 省略
7 7 省略
8 8 省略
9 9 省略
簡単に言ってしまえば、ArrayResize関数を実行すると、それ以前に格納した数値は、初期化されると思い込んでいました。

【実際の処理】

No sum 実際の処理過程
1 1 k[0]=1
2 3 (k[0]=1)+(k[1]=2)=3
3 6 (k[0]=1)+(k[1]=2)+(k[2]=3)=6
4 10 (k[0]=1)+(k[1]=2)+(k[2]=3)+(K[3]=4)=10
5 15 (k[0]=1)+(k[1]=2)+(k[2]=3)+(K[3]=4)+(K[4]=5)=15
6 21 省略
7 28 省略
8 36 省略
9 45 省略
実施は、上記の様になります。つまり、配列を、初期化せずに配列数を変えていきます。
ArrayResize関数は、動的配列を行うための関数だったってことです。

【まとめ】

alohafxさんのブログに書かれているように、ATC2011に再挑戦しようと思っていますが・・・・こんな状態です。はたして間に合うかどうか・・・、それと、ツイッターをしてみることにしました。ほとんど情報収集用ですが・・

0 件のコメント :