目的
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
関連情報