Forループで制御変数iの値を操作してループ回数を変化させたい
58 ForLoopControl 動作確認 Delphi2007 更新日 2008/01/30(水)

Delphiでは

  for i:=1 to 10 do
  begin
   :
  end;

このようにすることで、1〜10までループしますが
begin..endのループ中にiの値を変更することができません。
コンパイラの仕様のせいで仕方ないとはいえ
ループを数回飛ばしたい場合の
アルゴリズムを実装するには非常に面倒です。

例えば、文字列処理を1文字ずつ行っていて
数文字分処理を飛ばしたい場面でよく使います。

そういう時、forを使うのは無理なので
while を使って for と同じループをさせます。
1〜10までループさせる while を使ったコードは以下のようになります。

  i := 1;
  while i <= 10 do
  begin
   :
    Inc(i);
  end;

最初forで作っておいて、途中でwhileに変更するのは
結構、面倒ですが、こういうやり方を覚えておくとよいでしょう。

具体的な数値ではなく[X][Y]で表現してみます。
────────────────────
    for i := X to Y do
    begin
     :
    end;

    ↓

    i := X; while i <= Y do
    begin
     :
      Inc(i);
    end;
────────────────────
これで途中で i を足したり引いたり i:=i*2; と実装することができます。

なお、for..downto..のループは以下のように書くとよいです。
────────────────────
    for i := X downto Y do
    begin
     :
    end;

    ↓

    i := X; while Y <= i do
    begin
     :
      Dec(i);
    end;
────────────────────