第25講 様々なループ文
第1話 while文
繰り返し処理として、第4講でfor文を紹介しましたが、
ループ文にはfor文以外に、while文、do..while文もあります。
この講では、この二つのループ文を紹介していきます。


では、皆さん第4講のお復習いです。次のようなForm1
を作り、ビルドしてTextBoxに値を入れて実行ボタンを押すと、
のように答えの出るソフトを作ってください。
解答例は20行下に書きます。
























プログラミング例
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int wa=0,i,ow;
           ow=int::Parse(textBox1->Text);
           for(i=1;i<=ow;i++){
             wa+=i;
           }
           label2->Text=wa.ToString();
        }
   };
}

while文で同じように処理させるためには、
次のようにします。 
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int wa=0,i,ow;
           ow=int::Parse(textBox1->Text);
           i=1;
           while(i<=ow){
             wa+=i;
             i++;
           }
           label2->Text=wa.ToString();
        }
   };
}

while文は、while(条件式)の条件式が正しい場合処理を続け、正しくなくなったときにループを抜けます。
今回の
           while(i<=ow){
             wa+=i;
             i++;
           }
の場合は、iがow以下の場合処理を続けることになります。

while文を使う際に気をつけなければならないことは、
無限ループにならないように注意することです。
たとえば、
           while(i<=ow){
              wa+=i;
           }
だと、i=1よりiは1のままですからループ文を終了できません。
この場合は、無限ループになってしまいます。

while文は、条件式が真の場合繰り返し処理を続けますので、
次のようにプログラミングすることもできます。
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int wa=0,i,ow;
           ow=int::Parse(textBox1->Text);
           i=1;
           while(1){
             wa+=i;
             i++;
             if(i>ow)break;
           }
           label2->Text=wa.ToString();
         }
   };
}
break文は、for文のときと同じで、強制的にループ文を終了させることができます。
C言語では、条件式が真であるとき、その式自体が1の値を持ちます。
i<=owが真であるときは、その式自体が1という値を持っているのです。
そして、偽になると式自体の値が0になります。
ですから、プログラミングは次のようにも変更できます。
#pragma endregion
   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int wa=0,i,ow,j;
           ow=int::Parse(textBox1->Text);
           i=1;
           j=1;
           while(j){
             wa+=i;
             i++;
             if(i>ow)j=0;
           }
           label2->Text=wa.ToString();
         }
   };
}


繰り返しますが、while文を使うときには、無限ループにならないように細心の注意を払ってください。

ところで皆さん、なぜi>owi>=owではいけないのでしょうか。
考えてみてください。後で学習するdo..while文とも関連する問題です。


  
さて、問題を2題出してこの話を閉じましょう。
問題1
次のようなForm1を作り、ビルドして
左のように入力して実行ボタンを押すと
15+20+25+・・・+150の計算ができるようなソフトをwhile文でプログラミングしてください。
つまり、最初のソフト
はじめの値と加える幅が1に限定されていたのに対して、そこも自由に指示できるように変更していただきたいということです。

問題2
問題1のソフトを改良して、はじめの値と加える幅に加えて、合計の上限を指定して、
上限以下の合計の最大値を求められるようにしてください。
例えば、
15+18+21+・・・を計算していって、合計が100を超えない値まで計算していったときの合計を求めさせるようにしてください。



第24講第7話へ 第25講第2話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座