繰り返し

指定した条件を満たしている間、または条件になるまでの間、繰り返して同じ処理を行うことをループ処理といいます。
繰り返す回数があらかじめ分かっている場合は「for..to」を使用します。
回数がわからない場合は、「while…do」または「repeat…until」を使います。

for文

  • for…to…do は、指定した初期値からカウンタを1つずつ増やしながら、最終値になるまで、do以降の処理を実行します。
  • for…downto…do は、カウンタを1つずつ減らしながら処理を行います。初期値は、最終値よりも大きい必要があります。
  • begin…end を使って、ブロックを明確にします。

【サンプル】 5回の繰り返し(for…to…do)

procedure TForm1.Button1Click(Sender: TObject);
var
  i         : Integer;  //ループのカウンタ

begin
   Memo1.clear;
   for i:=1  to 5 do    //カウンタが1から5の間
                        //begin...end の処理を繰り返す
   begin
       Memo1.Lines.Add(IntToStr(i)); //カウンタの値を表示
   end;

end;

 

while文

  • while…do は、指定した条件が満たされている間(True)、do の直後のブロック処理を実行します。
  • 条件式は、ブロックの処理を行う前に評価されます。条件に満たない(False)場合は、ループに入りません。

【サンプル】 5回のループ。前の答えに、ループのカウントを加算しています。

procedure TForm1.Button1Click(Sender: TObject);
var
  i         : Integer;  //ループのカウンタ
  intAns    : Integer;  //答えの数値

begin
  i := 1;               //初期値を変数に代入
  intAns := 0;          //初期値を変数に代入

  while i <=5  do       //カウンタが5以下なら begin...endの間を繰り返す
    begin

      intAns := intAns + i ; //答えにiの値を加算
      Memo1.Lines.Add('i =  '  + IntToStr(i) + ' → ' + IntToStr(intAns));
      i := i + 1;       //カウンタの値を1増やす
    end;
end;

【実行結果】

答えの初期値はゼロなので、0+1=1です。2順目はその1にカウント2を足して3になります。

ren18

repeat文

  • repeat…until は、until文で指定した条件が満たされるまで(Falseの間)、repeat の直後のブロックを実行します。
  • 条件式は、ブロックの処理を行った後に評価されます。ループは必ず一度は実行されます。

【サンプル】 結果はWhile文と同じです

procedure TForm1.Button1Click(Sender: TObject);
var
  i         : Integer;  //ループのカウンタ
  intAns    : Integer;  //答えの数値

begin
  i := 1;               //初期値を変数に代入
  intAns := 0;          //初期値を変数に代入

  repeat
    begin
      intAns := intAns + i ; //答えにiの値を加算
      Memo1.Lines.Add('i =  '  + IntToStr(i) + ' → ' + IntToStr(intAns));
      i := i + 1;       //カウンタの値を1増やす
    end;
    until i > 5;        //iの値が5を超えるまで処理を継続(False)
                        //iの値が5を超えたら処理を終える(True)
end;

 

ループからの脱出

  • ループ構造から脱出する手続きとして、break continue があります。
    break手続きはループから脱出します。
    continue手続きは、ループの先頭に戻って処理を継続します。

【サンプル】

procedure TForm1.Button1Click(Sender: TObject);
var
  i         : Integer;  //ループのカウンタ
  intAns    : Integer;  //答えの数値
  intRet    : Integer;  //ダイアログボックスの戻り値
begin

  intAns := 0;          //初期値を変数に代入

  for i := 1 to 10 do
  begin
    Memo1.clear;
    intAns := intAns + i;
    Memo1.Lines.Add('i =  '  + IntToStr(i) + ' → ' + IntToStr(intAns));
    intRet := MessageDlg('続けますか?',mtConfirmation,[mbYes,mbNo],0);

    if intRet = mrYes  then  //「はい」ボタンがクリックされたら
      Continue               //ループの先頭から処理を継続
    else                     //「いいえ」がクリックされたら
      break;                 //ループから脱出する
  end;

  ShowMessage('終了');
end;

【実行結果】「はい」をクリックで続き、「いいえ」をクリックすると、終了します。

ren19

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です