前回学んだdoループ以外にも、くり返しの計算は可能です。次の例 をみてみましょう。
 
      n=0
 20   n=n+1
      write(*,*) 'endless loop',n
      goto 20
      end

さて、新しくでてきたgotoは その後の数字(行番号)のところへ処理を飛ばす命令です。 これを実行すると、programは止まりません。Ctrl + Cを押すしかないでしょう。 上の例では、gotoまで処理がくると行番号20に行き、nに1を加えるという 作業を永遠に繰りかえします。n=n+1 を奇妙に思った方もいらっしゃるかもしれません。 これは、基本で学んだように数学でいう等式ではなくて、 右辺値を左辺に代入するという意味です。 だからここでは、古いnに1を足しそれを新しいnにするという、 処理をおこなっています。ついでにもうひとつ紹介しておきます。
 
      n=0
 20   continue
      n=n+1
      write(*,*) 'endless loop',n
      goto 20
      end

これは、行番号20のところにcontinue が加わっただけですが、continueは何もしない為、programの 実行結果は前の例題と全く同じです。私としては こちらのprogramの方がみやすいと思うので、 以後はこの書き方をします。少し話がそれたので元に戻し、 条件文の書き方を学びましょう。
 
      n=0
 20   continue
      if(n.eq.10) goto 100
      n=n+1
      write(*,*) 'endless loop',n
      goto 20
 100  continue
      end

3行目にif (n.eq.10) goto 100 が加わりました。これは、n=10(等式)ならば行番号100に処理 を移すという命令です。n≠0ならば、 if文は無視され次の行に処理を移します。 もうひとつ if文の書き方を学びましょう。
 
      write(*,*) 'input integer'
      read(*,*) k
      judge=mod(k,2)
c
      if(judge.eq.0) then
       write(*,*) 'you input even number'
      end if
c
      if(judge.eq.1) then
       write(*,*) 'you input odd number'
      end if
c
      end

3行目 judge=mod(k,2) の右辺modは関数で ここの例ではkを2で割った剰りを返します。 例えばk=11ならばmod(k,3)は2となります。 関数にはmodの他にsin(x)やerf(x)などがありますが、 ここでは詳しくは触れません。 前例のif文と違い、今度の例には then end if が加わっています。これはif文の条件を満たせばthen以下に、 満たさなければend if以下に、処理を渡します。 例えばキーボードからkに5を入力すると、3行目よりjudgeの値 は1となります。5行目if文の条件はjudge=0なので、 6行目write文はとばされ、 9行目if文での条件judge=1は満たすので、then以下の命令 write(*,*) 'you input odd number'が実行されるのです。 上の例は次のようにも書けます。
 
      write(*,*) 'input integer'
      read(*,*) k
      judge=mod(k,2)
c
      if(judge.eq.0) then
       write(*,*) 'you input even number'
      else
       write(*,*) 'you input odd number'
      end if
c
      end

新しい命令else は『それ以外』という意味で、ifの条件が満たされれば、 thenからelseまでが、満たされなければelseから end ifまでが処理の対象となります。条件として使えるものには『eq』 の他に次のようなものがあります。
a = b(a.eq.b)
a > b(a.gt.b)
a < b(a.lt.b)
a ≠ b(a.ne.b)
a ≧ b(a.ge.b)
a ≦ b(a.le.b)