目的
DO ステートメントは、それ自身と、指定された終端ステートメント までの間にあるステートメント (その終端ステートメントも含む) の実行 を制御します。 これらのステートメントすべてが DO 構文を構成します。
構文
>>-+----------------------+--DO--+------------+-----------------> '-DO_construct_name--:-' '-stmt_label-' >--+---------------------------------------------------+------->< '-+---+-var_name = a_expr1, a_expr2--+------------+-' '-,-' '- , a_expr3-' |
DO ステートメントで DO_construct_name を指定する場合、同じ DO_construct_name が 指定されている END DO でその構文を終了させます。 逆に、DO ステートメント上に DO_construct_name を指定せずに、 END DO で DO 構文を終了させる場合は、 END DO ステートメントに DO_construct_name を指定してはなりません。
DO ステートメントにステートメント・ラベルを指定した場合は、同じステートメント・ラベルの付いた ステートメントで DO 構文を終了させなければなりません。 ラベル付き DO ステートメントを同じラベルが付いている END DO ステートメントで 終了させることはできますが、ラベルなし END DO ステートメントで終了させることはできません。 DO ステートメントにラベルを指定しない 場合は、END DO ステートメントで DO 構文を終了させなければなりません。
制御文節 (var_name で始まる文節) を指定しないと、そのステートメントは無限 DO になります。 ループは (たとえば EXIT ステートメントなどによって) 中断されるまで、 いつまでも実行を繰り返します。
例
INTEGER :: SUM=0 OUTER: DO INNER: DO M=1,10 READ (5,*) J IF (J.LE.I) THEN PRINT *, 'VALUE MUST BE GREATER THAN ', I CYCLE INNER END IF SUM=SUM+J IF (SUM.GT.500) EXIT OUTER IF (SUM.GT.100) EXIT INNER END DO INNER SUM=SUM+I I=I+10 END DO OUTER PRINT *, 'SUM =',SUM END
関連情報