4-10 繰り返し処理 (6) ―whilewhileWhile 文の導入―

前のプログラムでは、何度もボタンボタンコマンドボタンを押していくとそのうち答えが求まります。でも、ボタンボタンコマンドボタンを1回押すだけで答えが求まるプログラムにしたいですね。

何回もボタンボタンコマンドボタンを押すことは、forforFor 文ででてきた「繰り返し」と呼ばれる操作 (作業) です。ですから、まずは forforFor 文を使ってボタンボタンコマンドボタンを1回押すだけのプログラムを考えてみましょう。プログラムは次のようになります。

■C++Builder block■
procedure TForm1.ButtonCalcClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to              do
    begin
      SpinEditMinute.Value := SpinEditMinute.Value + 1;
      SpinEditBact.Value := SpinEditBact.Value * 2;
    end;
end;
Private Sub CommandCalc_Click()
  Dim i As Integer
  For i = 1 To         
    TextMinute.Text = TextMinute.Text + 1
    TextBact.Text = TextBact.Text * 2
  Next
End Sub

しかし、困りました。「何回繰り返すか」を指示する下線部に何と書いていのか、わからないのです。

【練習問題】

forforFor 文は、回数が決まっている繰り返しにしか使えないのです。回数が決まっていない繰り返しには、「whilewhileWhile 文」を使います。プログラムを次のように変更してください。

■C++Builder block■
procedure TForm1.ButtonCalcClick(Sender: TObject);
begin
  while SpinEditBact.Value < 10000 do
    begin
      SpinEditMinute.Value := SpinEditMinute.Value + 1;
      SpinEditBact.Value := SpinEditBact.Value * 2;
    end;
end;
Private Sub CommandCalc_Click()
  While TextBact.Text < 10000
    TextMinute.Text = TextMinute.Text + 1
    TextBact.Text = TextBact.Text * 2
  Wend
End Sub

whilewhileWhile 文は、「条件が成立している間は処理を繰り返す」という制御を行い、次のように書きます。

■C++Builder block■
while 条件 do
  begin
    繰り返し処理1;
    繰り返し処理2;
      ・
      ・
      ・
  end;
While 条件
  繰り返し処理1;
  繰り返し処理2;
    ・
    ・
    ・
Wend

プログラムを実行して、結果を確かめてみましょう。ちゃんと「14分」という答が出ましたか?

条件によって処理が変わるという点で ififIf 文と whilewhileWhile 文は似ていますが、ififIf 文は条件が成立してもしなくても1回きりwhilewhileWhile 文は条件が成立している間何度でも繰り返す点が違います。

■C++Builder 画像■

■C++Builder block■
while 条件 do
  begin
    繰り返し処理;
  end;

というように、繰り返し処理が1つしかない while 文は、if 文の場合と同様に、beginend; を省略して次のように書くことが出来ます。

while 条件 do
  繰り返し処理;

しかし、この書き方では、後で繰り返し処理を増やしたくなった場合に beginend;を付け忘れる可能性があります。これまで同様、たとえ処理が1つでも常に beginend;をつけることを勧めます。

【基礎課題 4-22】

1+2+3+4+… と足していくと、はじめて 10000 を超えるのはどこまで足したときでしょうか? プログラムを使って求めて下さい。(数列の和の公式は使わないで下さい。)

【応用課題 4-4】

■C++Builder 画像■1年間に 5% の利子がつく (つまり預金が 1.05 倍になる) 口座があります。この口座に10000円を預けておくと、何年後に30000円以上になるでしょうか?

左のようなプログラムを作って答を求めて下さい。