例題3 データを繰り返し読む

3つの実数の値を読み込んで、その平均を求めるプログラムを作成する。3つのデータの組を繰り返し読み込んで計算できるようにする。

 例題2のプログラム例 は、3つの実数を1組だけ読み込んでその平均を求めるものです。別の数値について計算したい時には、改めて実行しなければなりません。
 プログラム例を「3つ実数値について、何回か計算できるようにする」には、1組の計算が終わったら、もう一度データを読み込むところに戻り、データが無くなったらプログラムの実行を終わるようにします。

 例題3のフローチャートとプログラムの例を示します。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
c Example 3     データを繰り返し読む
c  機械工学科 1年  xxxxxxx  my name
c         Filename = reidai03.f
      real a1,a2,a3,asum,av
      write(*,*) ' 3つの実数の平均を求める '
 1001 continue
      write(*,*) ' 実数を3つ、カンマまたはブランク'
     *                      ,'で区切って入力する'
      read(*,*,end=9001) a1,a2,a3
      asum=a1+a2+a3
      av=asum/3.0
      write(*,*) ' a= ',a1,a2,a3,' 平均 ', av
      go to 1001
 9001 continue
      write(*,*) ' 計算終わり '
      stop
      end


  例題3のプログラム例について説明します。

 入力した一組のデータについて計算や出力などの一連の処理を終えたら、次のデータを読み込むように実行の流れを戻します。このために挿入された行が6行目と13行目です。

13行目の go to文は、実行の流れを指定された文番号(ここでは 1001)を持つ文に無条件に移動します。6行目は go to文の戻り先(ここではデータを読み込むところ)を示すcontinue文です。

この2行を挿入しただけですと、プログラムの実行はデータを入力するところへ必ず戻るので、プログラムの実行を終えるには強制終了しなければなりません。そこで、データが終わりの時は通常の計算をせずに、「 計算終わり 」と表示して終わるようにしたのが9行目と14,15行目です。

  9行目        read(*,*,end=9001)  a1,a2,a3
   と
14行目   9001 continue
15行目        write(*,*) ' 計算終わり '

 9行目のread文は、プログラム例 2 の  read(*,*) a1,a2,a3 ファイル終了指定子 end=9001 をつけ加えたもので、データの入力が終わりの時は指定された文番号(ここでは 9001)を持つ文に実行の流れを移します。キーボードからデータ入力の終わりを示すには Ctrl + D を押します。14行目は文番号 9001 を持つ文で、入力が終わりの時の飛び先になります。ここではcontinue文ですが、次のwrite文で「 計算終わり 」と画面に出力します。



Fortranの文法参照