第4講 for文を理解しよう
第7話 前話解答と新しい課題
1+(1+2)+(1+2+3)+(1+2+3+4)のコード
void f1(){
int a,b,i,j;
b=0;
for(i=1;i<5;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となります。
Ⅳ i=4のとき
a←0
この後、i+1=5なので
for(j=1;j<i+1;j++){
a=a+j;
}
は4回処理されます。
ⅰ j=1の場合
a←a+j=0+1
ⅱ j=2の場合
a←a+j=1+2
ⅲ j=3の場合
a←a+j=3+3
ⅳ j=4の場合
a←a+j=6+4
3回のループ処理により、aは10となっています。
すると、
b←b+a=10+10により、bは20となります。
これで2次元ループは終了となり
cout<<"等差数列の和の和:"<<b<<endl;
によって、コンソール画面に20が出力されます。
では、新しい課題です。
2次元ループを利用して
と出力するようにしてください。
答えが1桁(10は例外)と2桁の場合に分けないと、
とうまくそろいません。2次元ループを答えが10以下と11以上の場合に分けて2回実行するとうまくいきます。
尚、改行はcout<<endl;ですし、スペースを入れる場合はcout<<5*i+j<<" ";などです。
5*i+jは今回の大きなヒントです。
この課題に成功した人は、次に
を実現しましょう。
かなり難しい課題ですよ。
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)