第4講 for文を理解しよう
第6話 2次元ループ
第5話課題
1+(1+2)+(1+2+3)+(1+2+3+4)+・・・+(1+2+3+・・・+100)
の解答例
void f1(){
   int a,b,i,j;
   b=0;
   for(i=1;i<101;i++){
     a=0;
     for(j=1;j<i+1;j++){
       a=a+j;
     }
     b=b+a;
   }
   cout<<"等差数列の和の和:"<<b<<endl;
}
コンソール画面
入門

ループが入れ子式に2回入っているループを2次元ループといいます。
1次元に比べ、2次元は格段に難しくなります。
1+(1+2)+(1+2+3)の場合すなわち
void f1(){
   int a,b,i,j;
   b=0;
   for(i=1;i<4;i++){
     a=0;
     for(j=1;j<i+1;j++){
       a=a+j;
     }
     b=b+a;
   }
   cout<<"等差数列の和の和:"<<b<<endl;
}
の場合でトレースしてみましょう。
   b←0
Ⅰ i=1のとき
   for(i=1;i<4;i++){
     a=0;
     for(j=1;j<i+1;j++){
       a=a+j;
     }
     b=b+a;
   }
  は1回のみ処理されます。
  ですから
  a←0
  a←a+1=0+1
  そして、 
  b←b+a=0+1
  で現時点でbは1です。
Ⅱ i=2のとき
   a←0
   この後、i+1=3なので
     for(j=1;j<i+1;j++){
       a=a+j;
     }
  は2回処理されます。
  ⅰ j=1の場合
    a←a+j=0+1
  ⅱ j=2の場合
    a←a+j=1+2
  2回のループ処理により、aは3となっています。
  すると、
  b←b+a=1+3により、bはこの時点で4となっています。
Ⅲ i=3のとき
   a←0
   この後、i+1=4なので
     for(j=1;j<i+1;j++){
       a=a+j;
     }
  は3回処理されます。
  ⅰ j=1の場合
    a←a+j=0+1
  ⅱ j=2の場合
    a←a+j=1+2
  ⅲ j=3の場合
    a←a+j=3+3
  3回のループ処理により、aは6となっています。
  すると、
  b←b+a=4+6により、bは10となります。
これで2次元ループは終了となり
   cout<<"等差数列の和の和:"<<b<<endl;
によって、コンソール画面に10が出力されます。

実際、
1+(1+2)+(1+2+3)=1+3+6=10
つまり、i=1で1が、i=2で3が、i=3で6が実現され累積されていっています。

それでは、皆さん1+(1+2)+(1+2+3)+(1+2+3+4)の場合について、
コードとトレースをそれぞれ考えてください。






第5話へ 第7話へ


戻る


VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)