−トップへ−

繰り返し(while)

 「while」を使った構文は,「for」と同じように繰り返しを行う構文です。その違いは「for」は繰り返す回数が決まっているのに対し,「while」は条件によって何度でも繰り返します。この書式は以下のようになります。

  while (式) do
   (処理)
  end ;

または,

  while (式) do
  begin
   (処理1) ;
   (処理A) ;
  end;

 上の構文は,式が真の間は処理を行い,式が偽になれば処理を行わない,ということを表しています。これを使って具体的に書いてみます。

  var
   i : integer ; //あらかじめ i を整数宣言しておきます
   :
   :
  i := 0 ; //whileの前に i の初期値を設定しておきます
  while i<10 do
    i := i + 1 // i の値を1増やす。ここは文の途中なので ; はつけません。
  end ;

 上の文では,処理の部分で変数 i が1ずつ増えていきますが, i が10になると式が成り立たないので,i は10で処理は終了となります。

 次に,この「while」を使って2つの数の公倍数を10こ求めるソースコードを書いてみます。公倍数を求めるのは「for」のページでも行いましたが,そのときは1から500の間で公倍数を見つけるものでした。今回は数の大きさに関係なく,10個求めるまで繰り返します。
 用意するコンポーネントは,メモコンポーネント1個,エディットコンポーネント2個,ボタンコンポーネント1個です。行うことはボタンコンポーネントをクリックすることで,エディットコンポーネントに入力された2つの数の公倍数を10個求めてメモコンポーネントに表示します。配置は,「for」のページと同じようにメモコンポーネントを長くしてください。ボタンコンポーネントの[OnClick]イベント呼び出し以下のように記述してください。

procedure TForm1.Button1Click( Sender : TObject );
 var
  int , cot : integer ;// int に倍数, cot に公倍数の数として整数宣言します
begin
  int := 0 ;
  cot := 0 ;
  memo1.Lines.Clear ;
  while cot<=10 do begin
    int := int + 1 ;
    if int * strtoint(edit1.text) mod strtoint(edit2.text) = 0 then begin
      memo1.lines.Add( inttostr( int * strtoint( edit1.text ) );
      cot := cot + 1 ;
    end ;
end ;

 上のように書くと,式が長くなり,わかりにくいので,下のように変えます。内容はどちらも同じです。

procedure TForm1.Button1Click( Sender : TObject );
 var
  int , cot : integer ;// int に倍数, cot に公倍数の数として整数宣言します
  inte1 , inte2 : integer ; //edit1.text と edit2.text の数値を代入する変数を宣言します
begin
  int := 0 ;
  cot := 0 ;
  inte1 := strtoint(edit1.text) ; // inte1にedit1の数値を代入
  inte2 := strtoint(edit2.text) ; // inte2にedit2の数値を代入
  memo1.Lines.Clear ;
  while cot<10 do begin //ここの流れはcotが9のときは下の処理を実行して10個目を記入し,                 //cotが10になったら処理を実行せず終了となります
    int := int + 1 ;
    if int * inte1 mod inte2 = 0 then begin
      memo1.lines.Add( inttostr( int * inte1) );
      cot := cot + 1 ;
    end ;
end ;

 このソースコードを実行したとき,エディットコンポーネントに数字以外の文字を入力して,ボタンをクリックするとエラーが起きます。気をつけてください。

 このファイルを掲載しておきます。
→ダウンロード

−トップへ−