DO

目的

DO ステートメントは、それ自身と、指定された終端ステートメント までの間にあるステートメント (その終端ステートメントも含む) の実行 を制御します。 これらのステートメントすべてが DO 構文を構成します。

構文



>>-+----------------------+--DO--+------------+----------------->
   '-DO_construct_name--:-'      '-stmt_label-'
 
>--+---------------------------------------------------+-------><
   '-+---+-var_name = a_expr1a_expr2--+------------+-'
     '-,-'                              '- , a_expr3-'
 
 

DO_construct_name
DO 構文を識別する名前です。

stmt_label
同一の有効範囲単位内の DO ステートメントの後に指定されている実行可能ステートメントのラベルです。 このステートメントは、DO 構文の終わりを示します。

var_name
整数型または実数型のスカラー変数名 で、DO 変数と呼ばれます。

a_expr1a_expr2、 および  a_expr3
これらは、整数型または実数型のスカラー式です。

規則

DO ステートメントで DO_construct_name を指定する場合、同じ DO_construct_name が 指定されている END DO でその構文を終了させます。 逆に、DO ステートメント上に DO_construct_name を指定せずに、 END DODO 構文を終了させる場合は、 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

関連情報

IBM Copyright 2003