−トップへ−

繰り返し( for )

 「繰り返し」は,決められた回数を繰り返し行ったり,式が真の間または式が偽になるまで繰り返したりする制御文です。
 今回は( for )を使った繰り返しの構文について述べてみます。( for )を使った構文は指定された回数を繰り返し行います。書式は以下の通りです。

  for (整数型変数) :=(初期値) to (終了値) do (処理);

 もし,初期値が1で終了値が10ならば処理を10回繰り返すことになります。
 ( for )を使った書式にはもう一つあります。

  for (整数型変数) := (初期値) downto (終了値) do (処理);

 1つめと2つめの違いは,整数型変数の値をカウントアップしていくかカウントダウンしていくかという違いです。この整数型変数は(処理)の中で使うことができるので(処理)の内容によって使い分けます。

 この for を使ったソースコードを書いていきます。フォームに用意するのはメモコンポーネントとボタンコンポーネント2個です。
 配置は自由ですが,メモコンポーネントは縦長にした方が見やすいと思います




 2つのボタンコンポーネントの[OnClick]イベントを呼び出したら下のように書き込んでください。

procedure TForm1.Button1Click( Sender : TObject );
 var
  i : integer ;//for 文のときの変数は i を使うのが定番です
begin
  memo1.Lines.Clear ;//@
  for i := 1 to 10 do memo1.lines.Add( inttostr(i)+ '行目' );//A
end ;

procedure TForm1.Button2Click( Sender : TObject );
 var
  i : integer ;
begin
  memo1.Lines.Clear ;
  for i:=10 downto 1 do memo1.lines.Add( inttostr(i)+ '行目' );//B
end ;

 @は,メモコンポーネントに書かれている内容をすべて消去するという命令です。
 Aは,整数型変数の i を文字型変数に変換し,それに「行目」という文字列を付けてメモに書き込むという意味です。
 Bは,Aとほぼ同じですが,こちらは i の値が10から1まで下がっていきます。
 これを実行して,ボタン1とボタン2の違いを確認してみてください。

 ここで,for の書式の中で使える2つの言葉を紹介します。それは「continue」と「break」です。
 「continue」を文の中に使うと,それ以降の処理を飛ばして次の処理に移動します。
 「break」を文の中で使うと,そこから for 構文を抜けだします。
 言葉ではわかりにくいので,実際にやってみます。ここでは上の「Button1」の[OnClick]イベントを変更して使います。

procedure TForm1.Button1Click( Sender : TObject );
 var
  i : integer ;
begin
  memo1.Lines.Clear ;
  for i := 1 to 10 do
  begin
   if i=3 then continue ; //@
   if i=8 then break ; //A
   memo1.lines.Add( inttostr(i)+ '行目' );
  end ;
end ;

 今度は処理の文が複数になったので,「begin 〜 end 」を使いました。
 @では,i が3のときはそれ以降の処理を中断し,新たに処理をやり直すので,メモの表示を見ると「3行目」がなくなっていると思います。
 Aでは,i が8のときは,そこで for 構文を抜け出すので,8行目からは書かれていないと思います。


 以上のことを踏まえて,今度は2つの数字の公倍数と公約数を求めるソースコードを作ってみたいと思います。
 用意するのは,メモコンポーネントと,エディットコンポーネント2個,ボタンコンポーネント2個です。配置は自由ですが,メモコンポーネントは縦長にしてください。
 配置が終わったらボタンの[OnClick]イベントを呼び出し,次のように記入してください。

//ボタン1で公倍数を求めます
procedure TForm1.Button1Click(Sender: TObject);
 var
  i:integer;
begin
  memo1.Lines.Clear;
  for i:=1 to 500 do
  begin
    if i mod strtoint(edit1.text)>0 then continue;
    if i mod strtoint(edit2.text)>0 then continue;
    memo1.Lines.add(inttostr(i));
  end;
end;
//ボタン2で公約数を求めます
procedure TForm1.Button2Click(Sender: TObject);
 var
  i:integer;
begin
  memo1.Lines.Clear;
  for i:=1 to 500 do
  begin
    if strtoint(edit1.text) mod i>0 then continue;
    if strtoint(edit2.text) mod i>0 then continue;
    memo1.Lines.add(inttostr(i));
  end;
end;

 説明は省略しますが,i の値をもっと大きくすれば公倍数の数はもっと多く表示できます。

 このファイルは掲載しておきます。よければお使いください。
→ダウンロード

−トップへ−