第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)の場合について、
コードとトレースをそれぞれ考えてください。
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)