Fortran90(DO)

旧2-5. Fortran毎日学習

今まで繰り返し制御に使っていたDO文は、こんな形でした。

takk@deb9:~$ cat do.f
      PROGRAM MAIN
        DO 1000 I=1,10
          WRITE(*,*) 'HELLO'
 1000   CONTINUE
        STOP
      END
takk@deb9:~$ gfortran do.f
takk@deb9:~$ ./a.out
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
takk@deb9:~$

手元の古い教科書がCONTINUEを使う構文でしたので気にしてませんでしたが、どうやら古い書き方のようで、繰り返しは、END DOを使うのが正解のようです。

takk@deb9:~$ cat do.f90
      PROGRAM MAIN
        DO I=1,10
          WRITE(*,*) 'HELLO'
        END DO
        STOP
      END
takk@deb9:~$ gfortran do.f90
takk@deb9:~$ ./a.out
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
takk@deb9:~$

END DOでも行番号を指定して、入れ子のDOに対して一つのEND DOにできるのでしょうか。
入れ子にする前に、行番号が使えるかどうかやってみます。

takk@deb9:~$ cat do.f90
      PROGRAM MAIN
        DO 10000 I=1,10
          WRITE(*,*) 'HELLO'
10000   END DO
        STOP
      END
takk@deb9:~$ gfortran do.f90
takk@deb9:~$ ./a.out
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
takk@deb9:~$

使えるようです。
次に入れ子にします。ただし、DO 2つに対して、END DOは1つです。

takk@deb9:~$ cat do.f90
      PROGRAM MAIN
        DO 10000 I=1,2
         DO 10000 J=1,3
          WRITE(*,*) 'HELLO'
10000   END DO
        STOP
      END
takk@deb9:~$ gfortran do.f90
takk@deb9:~$ ./a.out
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
 HELLO
takk@deb9:~$

許容されてるんですね。
では、行番号を外すとどうなるのでしょう。

takk@deb9:~$ cat do.f90
      PROGRAM MAIN
        DO I=1,2
         DO J=1,3
          WRITE(*,*) 'HELLO'
        END DO
        STOP
      END
takk@deb9:~$ gfortran do.f90
do.f90:7:9:

       END
         1
Error: END DO statement expected at (1)
f951: Error: Unexpected end of file in ‘do.f90’
takk@deb9:~$

ビルドエラーになりました。
使い方は分かりました。CONTINUEを使う書き方は古いらしいので、これからはEND DOを使っていきます。

コメント

タイトルとURLをコピーしました