インターネット&PC120%活用:PC活用編

FORTRANコーディング書式とREAD,WRITE

このページで説明している書式は固定形式と呼ばれ、FORTRAN77以前の古い形式です。
FORTRAN90以降では自由形式という書式でコーディングすることも可能です。
自由形式については、FORTRAN90以降の書式(自由形式)をご参照下さい。

FORTRANはCOBOLと同じく堅苦しいコーディングの書式が定められています。


まず、簡単なソースコードをあげますので、これに基づいて、この堅苦しい書式を説明します。

practice.f
C         program practice
          READ(5,*)k
          WRITE(6,100)k
100       FORMAT('SUU=', I4)
          END

実行例です。入力した値をそのまま表示する単純なプログラムです。

D:\win95\ftn77#>pr1
4567
SUU=4567

D:\win95\ftn77#>pr1
123456
SUU=****

D:\win95\ftn77#>pr1
987
SUU= 987


FORTRANでは、1行80桁に以下のようにコーディングするよう定められています。
1〜5桁 文番号
6     継続行
7〜72  プログラムの本文(コード)
73〜80 識別用ID番号

上記のpractice.f では1行目の1桁目に C とありますが、1桁目にCと記述するとその行はコメントとみなされます。
文番号は他の文から参照するために記述します。1から99999までの整数が使用できます。BASICでは、文番号が
命令文の実行される順番を表していましたが、FORTRANの文番号は、他の文から参照するための単なるラベルの意味
しかもちません。従って、他の文から参照されない場合は、文番号をつける必要はありませんし、文番号を昇順にふる
必要もありません。上記の例では、3行目の WRITE(6,100)K が文番号100(4行目のFORMAT文)を参照しています。
文番号が必要となるのは、FORMAT, CONTINUEや、IF, GOTO での条件分岐先や飛び先です。

コードが1行に収まりきらない場合は、6桁目に空白や0以外の文字を記述して、継続行とします。

7〜72桁目にFORTRANのプログラム本文を記述します。7〜72桁の間のどこに書いてもかまいません。注意点は
FORTRANでは、1行に複数の文(マルチステートメント)を記述できない点です。
それとプログラムの終わりに必ずENDを記述して下さい。

これで、とりあえず一番面倒なコーディング書式は終わりです。


変数
FORTRANでは、変数は数値型、論理型に分かれます。先頭の文字は英文字を使用するうことになっています。
さて、聞いたことがあるかもしれませんが、FORTRANの数値型には暗黙の型宣言というルールがあり、特別に型宣言を
しない限り、先頭がI,J,K,L,M,Nで始まる数値変数は整数型、それ以外の文字で始まる変数は実数型となるというルールが
あります。BASICでも整数型の変数には、I,J,M,Nといったあたりを使うことがなんとなく多いと思いますが、その由来はここ
からきています。
従って、特に宣言しない場合は、I, ITOTAL, JSUM, L20 といった変数は整数型として扱われます。

暗黙の型宣言に従わない時は、明示的に型宣言をする必要があります。型宣言は以下の通りです。
整数型 INTEGER
実数型 REAL
論理型 LOGICAL
倍精度実数型 DOUBLE PRECISION

FORTRANでは特に文字型(Basicのa$,b$のような文字型変数)はありません。文字列を扱う時には、整数型、
実数型、倍精度実数型変数を使います。1バイト文字(しかつかえないFORTARNが多い)の場合、整数型では2文字、
実数型で4文字、倍精度実数型で8文字を格納できます。もっと長い文字列を扱う時は、配列を準備し、1文字づつ
配列変数に格納して処理することになります。

READ
データを読み込む命令がREADです。BasicのInputに近いものです。
READ(5,*)K
と記述した場合、最初のパラメーターは、入力装置番号を指定するパラメーターです。伝統的に5は、カード読み取り
装置(古い!言語ですから)を指定する値ですが、近年はキーボード入力も5を指定するのが一般的のようです。
ただし、コンパイラによって、ここの仕様が異なったりしますので、自分の使うコンパイラのマニュアルを確認すること
をおすすめします。
2番目のパラメーターは、書式を指定するFORMAT文の文番号を記述します。ここでは特に指定するFORMAT文は
ないので、*にしています。
読み込んだ値は変数Kに格納されます。

WRITE
データを出力するのがWRITEです。最初のパラメーターは出力装置を指定し、2番目のパラメーターは、出力の書式
を指定するFORMAT文の文番号を記述します。( )の外に、出力する変数を列挙します。
出力装置の指定で6は伝統的にラインプリンタを指定する値ですが、近年は6でディスプレイも指すようになっています。
ここも、使うコンパイラにより仕様が異なる場合があるので、確認して下さい。

FORMAT
READ, WRITEでデータを読み込んだり、出力したりするときの、書式の設定に使用します。
このFORMAT文が、FORTRANの格調高い部分でもあり、あるときにはうざい部分でもあります。
FORMATを詳細に説明すると、かなりの分量になるので、詳細はFORMATに譲るとして、ここでは、
上記の FORMAT('SUU=', I4)
についてだけ説明しましょう。
文字列を出力する時は、'SUU=' のように文字列をシングルコーテーションでくくって記述します。
その後ろの I4 は欄記述子と呼ばれるもので、入出力する変数の表示形式を指定します。I は整数を
あらわし、I4 は4ケタの整数を表示します。ケタ数が満たない場合は、右づめで表示され、あいたケタ(左側)
には空白がつめられます。上記の例では変数Kを4ケタの整数として表示します。上記の実行例で、987を
入力した場合には、一番左に空白がつめられて、右づめで表示されているのを確認して下さい。
ケタあふれして、4ケタでは表示しきれない場合には*が表示されます。


END
プログラムの終了を表します。必ず最後はENDで終わって下さい。





TopPage


inserted by FC2 system