繰り返し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 ; // とにかく,式が真になれば処理は終了です