2. 簡単な計算                                                 目次へ

 2.1.   算術演算
 2.1.1. 基本的な文
 2.1.2. 文字列の出力

2.1. 算術演算

2.1.1. 基本的な文


 例題 2_1「2つの正の数値を読み込んで,その算術平均,幾何平均,調和平均を
      求める。」

[ex2_1.f90]                  ←クリックすると「ex1_1.f90」が表示されますが,
                               中身は同じです。Download して実行できます。
! ---  3種類の平均値 ---
  PROGRAM Example_2_1
     REAL :: a, b, av1, av2, av3
     READ *, a, b
       av1 = (a + b)/2.0
       av2 = (a*b)**0.5
       av3 = 2.0/(1.0/a + 1.0/b)
     PRINT*, av1, av2, av3
   END
 
[実行例]
   1.0  2.0                       ←キーボードから入力(a,bの値)
   1.500000       1.414214       1.333333    ←結果を画面へ出力

===============================================================================
                a + b                                            a-1 + b-1  -1
  算術平均 = -----      幾何平均 = (ab)1/2      調和平均 = (---------)
                  2                                                  2
===============================================================================


(プログラムの説明)

 PROGRAM文  プログラムの開始を宣言する文で,省略可能。

 REAL文  変数a,b,...を実数型データを表す変数として用いることを宣言(予約)す
る。整数型データとして扱う場合には,INTEGER と宣言する。

 変数名  a,bのように意味の無いものでもよいし,av1,av2,av3 のように意味らしき
ものを持ったものでもよい。数学で使う変数との違いは,xyのように2文字で書いても
x×y ではなく,あくまでも一つの変数であることである。約束は,一つの変数は

 「先頭が英字で,英字,数字,下線の組み合わせで長さ31字以内」

である。

 入出力文(デフォルト仕様)

       READ *, データを表す変数のリスト
              READ(*,*) データを表す変数のリスト

       PRINT *, 変数や定数,式などのリスト
              WRITE(*,*) 変数や定数,式などのリスト

 入出力ともに,どちらの形でもよい。*印はこのとおりに書くこと。「,」に注意。

 データの入力  READ*文が実行されるとデータ入力待ちの状態になる。複数のデー
タを入力するときは,コンマ(,) 空白 または 改行 で区切り,一つのデータの途中に
空白があってはならない。

 代入文: 右辺の値を評価して左辺の変数の値として代入する実行文

 
        変数 = 変数,定数,式 など


      例 sum = sum + x

 算術演算(加減乗除およびベキ)


  2項演算: 和(+),差(-),積(*),商(/),ベキ(**)

  単項演算: +  -   (例 -a)

  演算の優先順:かっこ( )でくくられていない限り


        和,差 < 積,商 < ベキ


  の順位で行われ,同順位ならベキ演算は右から,それ以外は左から処理される:

  例 x + y*z  は x + (y*z)   
    x*y**2   は x*(y**2)
        x/y/z   は  (x/y)/z
        x**y**z  は  x**(y**z)

    間違いやすい例:「4b分のa」は a/(4*b) または a/4/b
                 間違い: a/4*b , a/4b

    確信がないときには( )を使うこと。処理時間には殆ど影響しない。

 END文 プログラムの終りを表すもので必須。これに対して PROGRAM文は任意。


(数値データの型)数値データには1章で定数について説明したように整数,実数,
複素数,および各々について高精度のデータがある。この章ではすべて標準精度の実数
データを想定している。異なる型のデータの間の演算規則については,4章4.5.で扱う。


2.1.2. 文字列の出力
 例題2_1では,READ文の実行でデータa,bの入力待ちの状態となるが,コンピュータは
沈黙したままであり,いったい何が要求されているのか,プログラムの作成者以外には
わからない。作成者でも少し時間がたつと忘れてしまう。また,PRINT文で出力された
データも,それが何を意味するのか分からない。これでは困るので,「何を要求されて
いるのか」「何が出力されたのか」が分かるような工夫が必要である。


   文字列の出力     PRINT *, 文字列データ
                     WRITE(*,*) 文字列データ

   文字列データ    文字列を ' ' または " " で囲んだもの



 例題 2_2「直円錐の底面の半径rと高さhを入力して体積と表面積を求める。」

[ex2_2.f90]
   ! --- 直円錐の体積と表面積 ---
      REAL :: pi, r, h, v, s
      pi = 3.141593
      PRINT*,'Hankei r and Takasa h ?'
      READ*, r, h
         v = pi*h*r**2/3.0
         s = pi*r*(r + (r**2 + h**2)**0.5 )
      PRINT*,'Taiseki =', v
      PRINT*,'Hyomenseki =', s
   END

[実行]
 Hankei r and Takasa h?   ← 何を入力待ちになるかが画面で明確に分かる。
 3.0  5.2
   Taiseki =   49.00885    ← 何の値かが分かる。
   Hyomenseki =   84.85442 ←    〃



 例題 2_3 「与えられた整数の2乗から5乗までのベキ乗を順に求める。」

[ex2_3.f90]
!-----   累乗   ---
      INTEGER :: m, n
      PRINT*, "Input an integer:"
      READ*, n
         m = n
         m = m*n ; PRINT*, m
         m = m*n ; PRINT*, m
         m = m*n ; PRINT*, m
         m = m*n ; PRINT*, m
      END



 例題 2_4 「関数の値の計算」(文関数→8章)

[ex2_4.f90]
! --- 関数の値の計算 ---
      REAL :: f, x, a
      f(x) = x**5 + 6.0*x**4  + 2.0*x**3 + x**2 + 4.0   ! 簡単な関数の定義
      READ*, a
      PRINT*, ' f(', a, ')=', f(a)
   END


 ⇒2章先頭へ ⇒3章へ