繰り返し(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 ;
このソースコードを実行したとき,エディットコンポーネントに数字以外の文字を入力して,ボタンをクリックするとエラーが起きます。気をつけてください。
このファイルを掲載しておきます。
→ダウンロード