例題4 判断

はじめに3つの実数の値を読み込んで、その平均を求める。次に新たに実数値を読み込んで、先に求めた平均値と比較し、平均値より大きいか等しければその実数値と「大」を、小さければ実数値と「小」を表示するプログラムを作成する。平均値と比較する実数値は1つではない。

 例題2のプログラム例 は、3つの実数を1組読み込んでその平均を求めるものです。このプログラムに、実数値を読み込んで平均値と比較する処理を追加します。

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

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
c Example 4     判断
c  機械工学科 1年  xxxxxxx  my name
c         Filename = reidai04.f
      real a1,a2,a3,asum,av,a
      write(*,*) ' 実数を3つ入力する'
      read(*,*) a1,a2,a3
      asum=a1+a2+a3
      av=asum/3.0
      write(*,*) ' a= ',a1,a2,a3,' 平均 ', av
 1001 continue
      write(*,*) ' 実数を入力する'
      read(*,*,end=9001) a
      if(a.ge.av) then
         write(*,*) a, ' 大 '
       else
         write(*,*) a, ' 小 '
      end if
      go to 1001
 9001 continue
      write(*,*) ' 計算終わり '
      stop
      end


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

 入力した3つの実数値の平均を求めるのは、例題2と同じです。次に実数値を読み込んでそのデータについて平均との比較や出力などの一連の処理を終えたら、次のデータを読み込むように実行の流れを戻します。この部分の流れは例題3と同じです。

18行目の go to文で、実行の流れを指定された文番号(ここでは 1001)を持つ文に無条件に移動します。

12行目のread文にファイル終了指定子を指定し、データが終わりの時は通常の計算をせずに、「 計算終わり 」と表示して終わるようにしています。

13行目から17行目は読み込んだ実数値と平均値を比較して、平均値より大きいか等しければその実数値と「大」を、小さければ実数値と「小」を表示する部分です。

13行目        if(a.ge.av) then
14行目           write(*,*) a, ' 大 '
15行目         else
16行目           write(*,*) a, ' 小 '
17行目        end if

 この部分のプログラムの流れは次のようになっています。


               if(a.ge.av) then   ────────────┐
                  ────────────                │
                 │write(*,*) a, ' 大 ' │ ifブロック    │
                  ────────────                │
                else                                    │ ブロックif
                  ────────────                │
                 │write(*,*) a, ' 小 ' │ elseブロック  │
                  ────────────                │
               end if             ────────────┘

 ブロックifは( )の中の論理式 a.ge.av が真(すなわち 実数値 a の値が平均値 avの値よりも大きいか等しい)の時ifブロック( write(*,*) a, ' 大 ' )を実行し、そうでなければelseブロック( write(*,*) a, ' 小 ' )を実行します。 ブロックif文 による判断の詳細はFortranの文法を参照してください。



Fortranの文法参照