-Fortran- 無限ループ

Fortran 90/95において,キーボード入力した値までの自然数の和を求めるプログラム例を以下に示します.

PROGRAM loop_input
  IMPLICIT NONE
  INTEGER sum, n, i
    DO
      WRITE(*,*) 'Input n (if n <= 0, Stop) : '
      READ(*,*) n
      if (n <= 0) STOP 'end'
      sum = 0
      DO i = 1, n
        sum = sum + i
      ENDDO
      WRITE(*,*) 'Sum = ', sum
    ENDDO
END PROGRAM loop_input
 

上記のプログラムでは,入力と結果の表示が繰り返し行われるように,制御変数なしのDOループとしています.
また,プログラムにおいては,2つのDOループが使われていて,一方が他のループに含まれる形になっており,これを2重ループといいます.外側のDOループは,制御変数なしのDOループなので,DO - ENDDOの間にループから抜け出す仕組みを作っておかないと,反復演算が無限に繰り返されることになります.上記のプログラムでは,入力値が0以下であればSTOP文が実行されて終了するようになっています.

このプログラムをコンパイル,実行すると以下のようになります.

$ gfortran loop_input.f90
$ ./a.out
 Input n (if n <= 0, Stop) : 
50
 Sum =         1275
 Input n (if n <= 0, Stop) : 
100
 Sum =         5050
 Input n (if n <= 0, Stop) : 
-3
STOP end


上記の例では,キーボードからの入力を促す表示の後に改行されていますが,この改行を行わない場合は,WRITE文を以下のように書き換えます.

      WRITE(*,fmt='(a)', advance='no') 'Input n (if n <= 0, Stop) : '


このように書き換えてコンパイル,実行すると以下のようになります.

$ gfortran loop_input.f90
$ ./a.out
Input n (if n <= 0, Stop) : 30
 Sum =          465
Input n (if n <= 0, Stop) : 88
 Sum =         3916
Input n (if n <= 0, Stop) : 0
STOP end