−トップへ−

繰り返しB(repeat)

 「repeat」を使った構文は,「while」と同じように繰り返しを行う構文です。書式は以下のようになります。

  repeat
   (処理1) ;
   (処理2) ;
  until(式);

 上の構文は,まず処理を行い,その結果,式が真ならそこで終了し,式が偽なら最初に戻って処理を行うということを表しています。

 ここで,「while」を使った構文と「repeat」を使った構文を比較してみます。
 「while」の文では,まず式を見ます。ここで式が偽ならば,処理を一度も行わずに終了します。式が真ならば処理を行い,その後,式まで戻って真か偽かを判断します。また「while」の文で扱う処理は1つだけなので,複数の処理を行う場合は「begin〜end」を使います。
 「repeat」の文では,まず処理を行います。処理の結果を式で見て,真ならそこで終了します。偽なら最初に戻って処理を繰り返します。また「repeat」の文では複数の処理を「begin〜end」なしで書くことができます。
 私は「repeat」のほうがわかりやすいので,普段は「repeat」を使っていますが,それでも変数の値によって処理を一度も行いたくないときは「while」を使うこともあります。

 次に,「while」のページで作った,2つの数の公倍数を10個求めるソースコードを「repeat」を使って書き直してみます。用意するコンポーネントや変数はそのままで,ボタンを押したときの「while」の部分だけ変えてみます。

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 ;
  repeat
    int := int + 1 ;
    if int * inte1 mod inte2 = 0 then begin //ここの式は inte1 の倍数が inte2 で割り切れれば
      memo1.lines.Add( inttostr( int * inte1) ); //公倍数になるということを表しています
      cot := cot + 1 ;
    end ;
  until cot > 9 ; //ここの式は「cot = 10」,「cot>=10」でも同じです。自分でわかりやすい式にしてください。
end ; //       とにかく,式が真になれば処理は終了です

−トップへ−