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キー)とピリオドキーを同時に押して下さい。
プログラムを強制的に終了させることができます。
ただし、プログラムによっては終了できないときがあります。

REPEAT-UNTILループ文
REPEAT-UNTILループ文を使うと、条件を満たす間では、いくつかの行を繰り返し実行します。
ループの打ち切りに条件式を使っていることはWHILEループ文と似ていますが、
条件式をループ最後で評価している点が違います。
ループの流れ
&ref(): File not found: "loop03.jpg" at page "FOR";
REPEAT-UNTILループ文は以下のように書きます。
REPEAT
  文;
UNTIL 条件式;{条件を満たした時にループから抜ける}

PROCEDURE TEST;
VAR
		i:INTEGER;
BEGIN
		i:=0; {iを初期化する}
	REPEAT
		Writeln(i);
		i:=i+1 {iに1を加える}
	UNTIL i>10;
END;
Run(TEST);

WHILEループ文と同様、無限ループには注意して下さい。

GOTO文
指定した行にジャンプしたい場合にGOTO文を使います。
GOTO文をプログラムの中で使うには、最初にラベル宣言をしなければなりません。
ループの流れ
&ref(): File not found: "loop04.jpg" at page "FOR";
[ラベル宣言]
プログラム宣言部の次の2行目にラベル宣言文を書きます。
LABELの後にスペースをあけて、プログラムの中で使用されるラベル番号を配列し、カンマ(,)で区切ります。
ラベル番号は 0〜9999までの整数が使えます。

LABEL 1,2,3

[GOTO文の書き方]
GOTO文の後にスペースをあけて、ラベル番号を書きます。

GOTO 1;

(GOTO文を使ったプログラム例)

PROCEDURE TEST;
LABEL 1,2; {ラベル宣言}
VAR
		i:INTEGER;
BEGIN
		x:=IntDialog('数字を入力してください','0') ;
		IF x<10 THEN
			GOTO 1; {xの値が10未満ならば、1にジャンプする}
		Message('xの値は10以上です');
		GOTO 2; {2にジャンプする}
		1:Message('xの値は10未満です');
2:END;
Run(TEST);

GOTO文は大変便利な命令ですが、多用するとプログラムの流れがわかりにくくなる恐れがあります。


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