-Fortran- 奇数と偶数の和を求める

以下のプログラムは,1から100までの整数のうち,偶数と奇数の和をそれぞれ計算するプログラムです.

program loop_odd_even
  implicit none
  integer i, sum0, sum1
  sum0 = 0
  sum1 = 0
  do i = 1, 100
    if (mod(i, 2) == 0) then
      sum0 = sum0 + i
    else if (mod(i, 2) == 1) then
      sum1 = sum1 + i
    else
      stop 'sommething is wrong !!'
    endif
  enddo
  write(*, *) 'sum0, sum1, sum =', sum0, sum1, sum0 + sum1

 

endprogram loop_odd_even


doループの内部では,制御変数 i が偶数か奇数かを判別するために,組み込み関数である余り関数(mod(a, p))をif文に利用して,条件判定を行なっています.
このプログラムをコンパイル,実行すると以下のようになります.

$ gfortran loop_odd_even.f90
$ ./a.out
 sum0, sum1, sum =        2550        2500        5050
 
if文で最も多く用いられるのは,数値を比較する論理式で,以下のような関係演算子を用いて記述されます.
 
if (a > b)    abより大きければ真
if (a >= b)   abより大きいか等しいとき真
if (a <= b)   abより小さければ真
if (a == b)   abより小さいか等しいとき真

 

if (a /= b)   abと等しくなければ真


以下のプログラムは,上記のプログラムではプログラム中で指定していた合計を計算する範囲をキーボード入力(標準入力)で定めるように書き換えたものです.

program loop_inf
  implicit none
  integer i, n, sum
 
  do
    write(*,*) ' input n (if n <= 0, stop) :'
    read(*,*) n
    if (n <= 0) stop ' good bye ...'
    sum = 0
    do i = 1, n
      sum = sum + i
    end do 
    write(*,*) 'sum = ', sum
  enddo
end program loop_inf

$ gfortran loop_inf.f90
$ ./a.out
  input n (if n <= 0, stop) :
10
 sum =           55
  input n (if n <= 0, stop) :
100
 sum =         5050
  input n (if n <= 0, stop) :
0
STOP  good bye ...
 
上記のプログラムの中では,read文が使われています.
read( )の括弧内には,write( )の括弧と同様に,ファイル番号と書式をカンマで区切って記述します.
read文では,ファイル番号は入力元を指定し,これを"*"とすると,標準入力(処理系で定められた入力元で,通常はキーボード)からの入力となります.
また,read文の書式を"*"とすると並び入力となり,read文の後に並ぶ変数の型に合った書式で読み込みが行われます.
上記のプログラムでは,整数型変数nと同じ型のデータとして読み込みを行います.このため,数字以外の英字や記号を入力するとエラーとなります.また,実数(ex 1.23)を入力すると小数点以下が切り捨てられた整数とみなされます.例えば,0.01と入力すると,切り捨てにより n = 0 となり,上記のプログラムでは処理が終了となります.