fcode-bungy.fを例にプログラムの構成と当面必要な文法を列挙する。
program fcodebungy
は、最終行にあるend文と対にして使用される。
プログラムの始まりと終わりを示す。プログラムは通常、7カラム目以降-72カラム目
内に書くようにする。(自由書式形式が可能な場合もあるが、ここでは、伝統的
スタイルにて話を進める。)
implicit double precision (a-h,o-z)
は、アルファベット文字のaからhとoからzの文字で始まる変数を倍精度実数と
して使用することを示す。
implicit integer (i-n)
は、iからnの文字で始まる変数を整数で使用することを示す。
parameter (nx=1000)
あらかじめ定数を設定したい場合に使用し、プログラムが動作している間に
設定された数を変更しなくてもよいときに使用する。
integer i,nstep
integer method
変数i,nstep,methodの3つを整数として使用すること宣言している。
dimension z(nx),v(nx),f(nx)
1次元配列z,v,fの3つを使用することを宣言すると同時にその配列の
大きさnxを指定する。ここでは、その大きさは1000なっており、あらかじめ大きさ
が確定している必要がある。nxの代わりに、
1000と書いても同じであるが、このようにしておけば、変更する場合に
何箇所も修正しないで済むので便利である。また、以下のように倍精度まで1行で
指定することもできる。
real*8 z(nx),v(nx),f(nx)
8バイト(倍精度)の配列としてあらわに指定することができる。
open(unit=11,file='f-data.in')
必要なデータをファイルから読み込んだり、計算したデータを書き込んだり
するために必要なファイルを宣言している。ここでは、プログラムを読んで
ゆくと(unit=11)は入力に、(unit=16)は、出力に使われている。
read(11,*) nstep
ファイル(装置番号11)から変数nstepを読み込んでいる。
write(06,*)' Finish to read the data, now !'
モニター画面(装置番号06)に書き出している。ここでは、プログラムの制御
がここまで進んだことを知らせる意味があり、文字列を出力している。
g=9.80d0
z(1)=height
等号の記号=は「代入」を意味している。(等しいという意味はないので注意が
必要である。)
1行目は、gという変数名の変数に倍精度数値9.80d0を代入している。
裸で(倍精度)実数値を用いるときは、このようにd0を付けて記述する。
2行目は、配列zの1つ目のデータ格納場所にheightに入っている
データを代入している。
if( n .gt. nx )then
実行文1
endif
3つの場合に、場合わけをして違う動作をするようにプログラムミングするには
if( n .eq. 100 )then
実行文1
elseif( n .eq. 200 )then
実行文2
else
実行文3
endif
のようにする。elseifやelseとそれに伴う実行文は、省略することができる。
ifやelseifの次に現れている()の中には、条件文を書く。上記の場合は、
等しいかどうかを調べる条件文であり、
if( n .lt. 1 )then
実行文1
endif
の場合は、1より小さいかどうかを調べる条件文である。
999 continuecontinue文は、何もしないことを実行する実行文である。fcode-bungy.fでは プログラムの終りの方で使用している。必ずしも必要ではないが、文番号を 付けるときに用いると動作の前後関係がはっきり分かるので、プログラムの 構造が分かりやすくなり、よく使用されるが、最近ではあまり使用されない 傾向にある。また、何もすることがなくても、文法上実行文が必要な 場合にも使用することができる。
do i=2,nstep
.
(必要な実行文を入れる)
.
enddo
などと使われている。ここでは、まず、iに2を入れて、実行文を実行し、
enddoに来たら、最初のdoのところへもどりiに1だけ大きい整数を入れて、
実行文を実行する。doのカウンタiがnstepまで同様な実行を繰り返し終えた
らこのdoループの実行は終わりである。doループの中にさらにdoループが
あるものや、doループの中にifプロックがあるものなど、ifブロックと
doループを組み合わせることで、いろいろな計算が可能となる。