FORループ文を使うと、いくつかの行を一定の回数だけ繰り返させることができる。
ループの流れ
loop01.jpg

FORループ文は以下のように書きます。

FOR 変数:=初期値 TO 終了値 DO
     文;

  ※変数は INTEGER型でなければいけません。

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		FOR i:=5 TO 10 DO
			Writeln(i);
END;
Run(TEST);

[文が複数行ある場合]
文が複数行ある場合は BEGINとENDでくくります。

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		FOR i:=5 TO 10 DO
		BEGIN
			Writeln(i);
			Writeln(i*2);
			Writeln(i*4);
		END;
END;
Run(TEST);

[グループ内での注意]
ループ中の文でカウンタ変数の値を変更してはいけません。
プログラムが正常に動かない可能性があります。
悪い例

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		FOR i:=5 TO 10 DO
		BEGIN
			Writeln(i);
			i:=i-1; {カウンター変数の値を変更している}
		END;
END;
Run(TEST);

また初期値と終了値のいずれにもカウンタ変数を含めてはいけません。
悪い例

PROCEDURE TEST;
VAR
	i:INTEGER;
BEGIN
	FOR i:=5 TO i DO {終了時にカウンター変数を使っている}
		Writeln(i);
END;
Run(TEST);

WHILEループ分
WHILEループ分を使うと、条件を満たしている間はいくつかの行を、繰り返し実行します。
ループの流れ
&ref(): File not found: "loop02.jpg" at page "FOR";

WHILEループ文は以下のように書きます。

WHILE 条件式 DO
     文;

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		i:=0; {iを初期化する}
		WHILEi<=10 DO { i が10以下ならループを続け、文を実行する}
			i:=i+1; {iに1を加える}
END;
Run(TEST);

FORループ文に似ていますが、ループの打ち切りに回数ではなく条件式を使っている点が違います。
最初に判断しているので、条件によってはループの中の処理を一度も行わない場合もあります。
[文が複数行ある場合]
文が複数行ある場合は BEGINとENDでくくります。

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		i:=0; {iを初期化する}
		FOR i:=5 TO 10 DO
		WHILEi<=10 DO { i が10以下ならループを続け、文を実行する}
		BEGIN
			Writeln(i);
			i:=i+1; {iに1を加える}
		END;
END;
Run(TEST);

[グループ内での注意]
WHILEループ文を使う上で注意することは、無限ループです。
条件式が真のまま変化しないプログラムを書くと、ループを抜けることができなくなります。この状態を無限ループといいます。
無限ループの例

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		i:=0; {iを初期化する}
		WHILEi<=10 DO { i が10以下ならループを続け、文を実行する}
		BEGIN
			Writeln(i);
		END;
END;
Run(TEST);

iの値を加算していないので、iの値はいつまでも0のままです。
従って条件式がいつまでも真のままになり、無限ループになります。
条件式に使っている変数の扱いには十分気を付けて下さい。
無限ループになったら、ctriキー(Macの場合はcommandキー)とピリオドキーを同時に押して下さい。
プログラムを強制的に終了させることができます。
ただし、プログラムによっては終了できないときがあります。


リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS