ページ 11

二重ループの回数について

Posted: 2010年8月08日(日) 17:30
by shuto
forループの数え方ですが

 for( int i = 0; i < 100; i++ )
 {
   for( int j = 0; j < 10; j++ )
   {
     AAAA;
   }
 }

のようなループがあったら AAAA; は1000回動作であってますよね?
あるweb上のページにこの二重ループについて

10回 * 100回 + 100回 = 1100回
ループの順番を逆にすれば
100回 * 10回 + 10回 = 1010回

と書いてありました。何か私が勘違いして数え間違ってたりするのでしょうか?

Re:二重ループの回数について

Posted: 2010年8月08日(日) 17:33
by シエル
私は1000回だと思いますが。。
そのWEBページどこですか?

Re:二重ループの回数について

Posted: 2010年8月08日(日) 17:44
by shuto
http://members3.jcom.home.ne.jp/progstu ... tips4.html
ですね。
5年ほど前から更新がないようですが。

Re:二重ループの回数について

Posted: 2010年8月08日(日) 17:48
by シエル
本当に書いてありますね。どう考えても1000回だと思うんですが。
ベテランの人の回答がほしいです。

Re:二重ループの回数について

Posted: 2010年8月08日(日) 18:00
by fatens
疑わしければ確認するためのプログラムを書いてみてはどうでしょう。
Webページに書いてあることが常に正しいとは限らないので。

#include <stdio.h>

int main(void)
{
int i, j, count = 0;

for (i = 0; i < 100; i++) {
for (j = 0; j < 10; j++) {
count++;
printf("%d\n", count);
}
}

return 0;
}

Re:二重ループの回数について

Posted: 2010年8月08日(日) 18:13
by shuto
やってみました。
順番を入れ替えても1100回や1010回にはならないです。

何か特別な条件があるとも思えないですし、
やっぱり書いた人のミスなんでしょうかね?

Re:二重ループの回数について

Posted: 2010年8月08日(日) 18:14
by ドラ
そのサイトでは「何がNGなのかというと、ループの回数です。」と書かれていますが、
ループカウンタであるi, j がインクリメントされる回数の合計の話だと思います。

Re:二重ループの回数について

Posted: 2010年8月08日(日) 18:21
by shuto
おおっなるほど!
確かにそうですね!

つまりはこういうことですね

#include <stdio.h>

int main()
{
int i,j,n=0;

for(i=0;i<10;i++,n++){
for(j=0;j<100;j++,n++){
}
}
printf("%d\n",n);

n=0;
for(i=0;i<100;i++,n++){
for(j=0;j<10;j++,n++){
}
}
printf("%d\n",n);
return 0;
}


これなら1100回と1010回になりますね!ありがとうございました!

Re:二重ループの回数について

Posted: 2010年8月08日(日) 20:14
by naohiro19
外側が1回ループするごとに内側が10回繰り返されます。