第7講 for文以外の繰り返し処理
第4話 do...while文
do...while文を使えば、前話のプログラミングは次のように改良できます。
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
//変数の宣言
int a,b,c,i;
long w;
//条件値(はじめの値、終わりの値、変化の幅)を取得
a=int::Parse(textBox1->Text);
b=int::Parse(textBox2->Text);
c=int::Parse(textBox3->Text);
//初期化
w=0;
i=a;
//1乗の和の計算と表示
do{
w=w+i;
i=i+c;
}while(w+i<=b);
textBox4->Text=w.ToString();
//2乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i;
i=i+c;
}while(w+i*i<=b);
textBox5->Text=w.ToString();
//3乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i*i;
i=i+c;
}while(w+i*i*i<=b);
textBox6->Text=w.ToString();
//4乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i*i*i;
i=i+c;
}while(w+i*i*i*i<=b);
textBox7->Text=w.ToString();
}
};
}
(赤の部分を2011/05/19に訂正しました。間違いを重ねてお詫び申し上げます。)
では皆さん、このdo...while文をつかって、はじめの値から終わりの値以下まで足していくプログラムはどうなるでしょうか。
つまり、1乗の和を例にとれば、はじめの値を2、終わりの値を10、変化の幅を2とするとき、
2+4+6+8+9を計算させるのはどうしたらよいでしょうか。
実行結果例
解答例は30行下。
解答例
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
//変数の宣言
int a,b,c,i;
long w;
//条件値(はじめの値、終わりの値、変化の幅)を取得
a=int::Parse(textBox1->Text);
b=int::Parse(textBox2->Text);
c=int::Parse(textBox3->Text);
//初期化
w=0;
i=a;
//1乗の和の計算と表示
do{
w=w+i;
i=i+c;
}while(i<=b);
textBox4->Text=w.ToString();
//2乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i;
i=i+c;
}while(i<=b);
textBox5->Text=w.ToString();
//3乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i*i;
i=i+c;
}while(i<=b);
textBox6->Text=w.ToString();
//4乗の和の計算と表示
w=0;
i=a;
do{
w=w+i*i*i*i;
i=i+c;
}while(i<=b);
textBox7->Text=w.ToString();
}
};
}
結局while文でもdo...while文でも、
工夫すればはじめの値から終わりの値以下まで加えていく計算も、
はじめの値から合計の上限値を超えない範囲で加えていく計算も、
実現できます。
ただ、問題によっては前判定であるwhile文よりdo...while文の方が向いている場合もあるということですし、
その逆も言えます。
ですから、問題に応じて使い分ければよいことになります。
では、while文による2次元ループ、do...while文による2次元ループに挑戦しましょう。
それらによって、実行画面が
となるようにプログラミングして下さい。
第3話へ 第5話へ