Amazon.co.jp ウィジェット Fortran入門

Fortran入門

スポンサーリンク




プログラミング言語「Fortran」に関する情報。
プログラミング・文法の解説は、Fortran77の文法に従っています。
このページの情報は古いので、リンク切れ等あるかもしれません。

私は、以下のコンパイラー&エディターを、WindowsXPがインストールされたパソコンで使用しています。

無料コンパイラー

エディター

CPad for Salford FTN77
FTN77 Personal Edition用のFortran開発環境です。
簡単にコンパイル&実行ができます。

FTN77 Personal Edition

書き方

1行に一つの文(プログラム)を書きます。
左から6字目までは空けて、7字目から書きます。
プログラムの最後には、stop、endを書きます。

      write(*,*)'sample'
      stop
      end

1字目が「c」もしくは「*」の場合、その行にはコメントを書けます。
6字目が空白と0以外の場合、その行は前の行の続きになります。

c この行はコメント
* この行もコメント
      wri
     +te(*,*)'sample'
      stop
      end

変数と型

  • 変数名の長さは6字以下(7字以上OKの場合もある)
  • 変数名に使える文字は英数字
  • 変数名の先頭は英字
  • 型宣言をしない場合、i、j、k、l、m、nで始まる変数は実数型、それ以外は整数型(暗黙の型宣言)
  • 型宣言
    型宣言はプログラムの先頭で行う。
    integer 変数名 ・・・ 整数型
    real 変数名 ・・・ 実数型
  • 以下の場合、型変換が行われる。
    違う型の変数に代入した場合
    違う型の変数を混ぜて計算した場合
    int(変数) ・・・ 整数型に変換
    real(変数) ・・・ 実数型に変換
    float(変数) ・・・ 実数型に変換
      integer i1
      real x1,x2,x3
      x1=5
      x2=2
      i1=x1/x2
      write(*,*)'x1=',x1
      write(*,*)'x2=',x2
      write(*,*)'i1=x1/x2=',i1
c      
      write(*,*)'int(x1)=',int(x1)
      stop
      end

入出力

  • 入力は、read(*,*)変数名,変数名
  • 出力は、write(*,*)変数名,変数名
  • 「(*,*)」は、入出力装置と書式の指定
    「*」の場合、標準的な処理を行ってくれる
  • 文字列を表示したい場合は、「’」で文字列を囲む
      read(*,*)x,y,z
      w=x+y+z
      write(*,*)'w=x+y+z=',w
      stop
      end

書式の指定

  • 書式の指定は、formatで行う。
  • 下の例で、100、105は文番号
  • formatの行の文番号は、1~5字目までに書く
  • 「format(1f5.2)」の「1」は、データを1個ずつ読み込むという意味
  • 「format(1f5.2)」の「f」は、実数型のデータとして読み込むという意味
    整数型の場合は「i」
  • 「format(1f5.2)」の「5.2」は、「全部で5桁、小数点以下2桁」という意味
      read(*,100)v,w,x,y
100   format(1f5.2)
      write(*,105)v,w,x,y
105   format(' ',2f10.3)
      stop
      end

算術関数

Fortranでは以下の算術関数を使用できます。
角度の単位はラジアン。

x**y xのy乗
abs(x) xの絶対値
sqrt(x) xの平方根
mod(i,j) iをjで割った余り
max(x,y,・・・) x、y、・・・の最大値
min(x,y,・・・) x、y、・・・の最小値
log(x) log x
log10(x) log10x
exp(x) ex
sin(x) sin x
cos(x) cos x
tan(x) tan x
asin(x) arcsin x
acos(x) arccos x
atan(x) arctan x
atan2(x,y) arctan x/y
sinh(x) sinh x
cosh(x) cosh x
tanh(x) tanh x
      pi=atan(1.0)*4.0
      cos60=cos(pi/3.0)
      write(*,*)'π=',pi
      write(*,*)'cos60°=',cos60
      stop
      end

判断(if文)

  • if(条件式)条件式が成立した場合に実行するプログラム
  • if(条件式)then
    条件式が成立した場合に実行するプログラム(複数行書ける)
    end if
  • if(条件式)then
    条件式が成立した場合に実行するプログラム(複数行書ける)
    else
    条件式が不成立の場合に実行するプログラム(複数行書ける)
    end if
  • if(条件式1)then
    条件式1が成立した場合に実行するプログラム(複数行書ける)
    else if(条件式2)then
    条件式1が不成立で条件式2が成立した場合に実行するプログラム(複数行書ける)
    else if(条件式3)then
    条件式1と条件式2が不成立で条件式3が成立した場合に実行するプログラム(複数行書ける)
    end if
  • 条件式が成立した場合に実行するプログラム(条件式が不成立の場合に実行するプログラム)の中にもif文を書ける

下の例の「x.lt.20」は「x<20」の意味

      write(*,*)'x='
      read(*,*)x
      if(x.lt.20)then
      	write(*,*)'x<20'
      else
      	write(*,*)'x≧20'
      end if
      stop
      end

比較演算子と論理演算子

.lt. <(less than)
.le. ≦(less or equal)
.eq. =(equal)
.ge. ≧(greater or equal)
.gt. >(greater than)
.ne. ≠(not equal)
.and. 論理積(かつ)
.or. 論理和(または)
.not. 論理否定(ではない)
      write(*,*)'X='
      read(*,*)x
      if((x.gt.10).and.(x.lt.20))then
      	write(*,*)'10<X<20'
      else if(x.le.10)then
      	write(*,*)'X≦10'
      else
      	write(*,*)'X≧20'
      end if
      stop
      end

繰り返し(do文)

       do 文番号 制御変数=初期値,終値,増分
      	 繰り返し実行するプログラム
文番号 continue
  • 増分は省略すると1となる
  • continueの行の文番号は、1~5字目までに書く
  • doの行で、制御変数が終値に達していない場合、「繰り返し実行するプログラム」が実行される
  • 「繰り返し実行するプログラム」が実行された後、制御変数に増分が加算され、doの行に戻る
  • doループ内にdoループを書いてもかまわない
      do 100 i=1,9
      	do 200 k=1,9
          write(*,*)i,'×',k,'=',i*k
200   continue
100   continue
      stop
      end

配列

  • 配列とは、1つの変数(配列変数)で複数のデータを扱う場合に用いる。
  • 配列名の付け方は、変数名の付け方と同じ。
  • 配列を使用する場合は、配列名と大きさをプログラムの先頭で宣言しておかなければならない。
    dimension 配列名(下限:上限,下限:上限,・・・),・・・
  • 下限を指定しない場合、下限は1となる。
      dimension m(9)
      do 100 i=1,9
      	m(i)=i
100   continue
      write(*,*)(m(k),k=6,9)
      stop
      end

GOTO文

go to 文番号で、文番号のある行に飛ぶ。

200   write(*,*)'偶数を入力してください。'
      read(*,*)k
      if(mod(k,2).eq.0)then 
      	go to 100
      else
      	go to 200
      end if
100   write(*,*)'OK'
      stop
      end

サブルーチンと関数

サブルーチンとは、同じ作業を何度も行う場合などに、その部分をメインプログラムと切り離しておいて、必要なときに呼び出して使うことができるというものです。

      call サブルーチン名(引数,引数,・・・)
      stop
      end
c
      subroutine サブルーチン名(引数,引数,・・・)
      プログラム
      return
      end

サブルーチン名の付け方は、変数名と同じですが、型は関係ありません。

      dimension x(2)
      x(1)=1
      x(2)=2
      y=5
      call ss(x,y,z)
      write(*,*)'x1=',x(1)
      write(*,*)'x2=',x(2)
      write(*,*)'y=',y
      write(*,*)'z=x1+x2+y=',z
      stop
      end
c
      subroutine ss(a,b,c)
      dimension a(2)
      c=a(1)+a(2)+b
      return
      end

返す値が1つの場合は関数も使えます。
関数では、返す値を関数名に代入します。
関数名の付け方は、変数名の付け方と同じです。

      function 関数名(引数,引数,・・・)
      プログラム
      関数名=値 or 計算式
      return
      end
      x=2.0
      y=f(x)
      write(*,*)'x=2.0、','f(x)=2x+3=',y
      stop
      end
c
      function f(a)
      f=2*a+3
      return
      end

計算式が1行の場合は、文関数が使えます。

      f(x)=2.0*x+3.0
      y=f(2.0)
      write(*,*)'x=2.0、','f(x)=2x+3=',y
      stop
      end

シェアする

  • このエントリーをはてなブックマークに追加

フォローする