前回の復習をしておきましょう。次の例が何をしているかわかりますか?
 
      pi=3.1415927
      write(*,*) 'input radius'
      read(*,*) r
      answer= pi * r * r
      write(*,*) answer
      end

これは、半径をキーボードより入力し、円の面積を表示させます。 電卓よりは、入力数が少ないので多少は楽になったかも知れませんが、 いろいろな半径の円の面積をいくつも計算したい場合、programを 何度も実行するのは少し面倒です。 そんな時には同じ計算をくり返す命令があります。
 
      pi=3.1415927
c
      do 100 i=1,10
       write(*,*) 'input radius'
       read(*,*) r
       answer= pi * r * r
       write(*,*) answer
 100  continue
c
      end

新しい命令do と continue が加わっています。このdoとcontinueではさまれた部分が くりかえされる計算で、doループ と呼ばれています。 doループの書き方について学んでいきましょう。
まず、doループの中の命令が7カラムからではなく8カラム目 から始まっていますが、これは決まりではなくただみやすいので そうしています、7カラム目より始めても全く問題ありません。 Fortranでは7カラム目以降から命令を書き始めれば良くて8カラム目 からでも9カラム目からでもいいのです。 (ただ10000カラム以降でもいいのか?というとそうではなく、 制限があり何カラム以降には命令が書けないというのがあったような 気がしますが、覚えていませんm(_ _)m) さて、continueの前にある数字100 に気がついたでしょうか?これは7カラム目以降から始まっていません。 この数字は行番号と呼ばれるもので、 行番号は2,3,4,5カラム目に書くことになっています。 continueの前の数字とdo 直後の数字は対応していて、 同じ数字ではさまれた命令がくりかえされることになります。 くり返しの回数はdo 100の後の i=1,10 で決めます。まず整数を表す変数 i には最初1が代入され、doループ内に書かれた命令が上から順に実行されて continueまでくると、 iに1が足され2となり、 doまでもどります、そして再び命令が上から順に実行されて continueまでくると、 iに1が足され3となり 以下同様の手続がくりかえされiが10となりdoループ内の処理を終え、 continueまできたときに、また1が足され、iは11となり、処理はdoまで もどります。しかし今はmaxのiを 10 (do文の最後の数字) と設定しているため、doループ内の処理をとばして、continue以下に 処理を移します。次の例で確認してみてください。
 
      maxi=15
c
      do 10 i=1,maxi
       write(*,*) i
 10   continue
      end

画面上には1から15までの数字が並びましたね。 do文の最後には数字を入れずに変数 maxi と書いていますがこのような使い方もできます。 次はどうでしょうか
 
      maxi=15
c
      do 10 i=1,maxi
       write(*,*) i
 10   continue
c
      write(*,*) 'after do loop i=',i
      end

今度は、画面に1から16までの数字が並びましたね。 これは、doループの繰りかえす回数を決めている変数 (上の例では i)はdoループ後、maxiではなく maxiに1を足した数字になっているということです。 ついでに、少し変わったdoループの使い方をみておきましょう。
 
      do 10 i=10,20,3
       write(*,*) i
 10   continue
c
      write(*,*) 'after do loop i=',i
      end

doループの最後の数字3 がつけ加わっていますね。これはスキップ数を指定しています。 doループの最初でiに10が代入され、doループ内の 処理を終え、continueにきたときに3 が足されています。実行すれば気付いたかも知れませんが、 doループは指定したmaxの数字(今の例では20)を越える まで処理をくり返し、越えるとdoループの中をとばして continue以後に処理を渡します。 ちなみに、スキップ数を指定してないときは スキップ数を1としてprogramは実行されます。 今の例は次のようにも書き換え可能です。
 
      min=10
      max=20
      nskip=3
c
      do 10 kk=min,max,nskip
       write(*,*) kk
 10   continue
c
      write(*,*) 'after do loop kk=',kk
      end

これまで学んだことを使って、programを実際に書いてみましょう。 3の倍数を7個表示させるprogramをつくってみてください。
 
      do 10 kk=3,21,3
       write(*,*) kk
 10   continue
      end

と書いた方はいませんか?これは間違いありませんが、あまり いいprogramではありません。それは21という数字を あなたが計算しなければならないからです。
 
      do 10 kk=1,7
       nn=kk*3
       write(*,*) nn
 10   continue
      end

このようにした方がいいでしょう。 計算に幅をもたせる為には、次のようにも書けます。
 
      write(*,*) 'multiple number?'
      read(*,*) marti
      write(*,*) 'how many numbers you need?'
      read(*,*) numbers
c
      do 10 kk=1,numbers
       nn=kk*marti
       write(*,*) nn
 10   continue
      end

目次へ