FORTRAN(書式付き表示その1)

FORTRAN続きです。
コマンドラインを使いこなす上で、プログラミング知識も必要かと思い、いろんな言語を少しずつ学習していますが、FORTRANを理解するのが一番苦労してるかもしれません。

世界初の高級言語でスパコンにも使われている。66,77,90,95といった制定された年別に言語仕様が存在する。ぐらいは分かってきました。

前回は、さくっとprint命令を使って、Hello Worldを書いてみたものの、果たしてFORTRAN77にPRINT命令があったかどうかわかりません。というか、手元のFORTRAN77の教科書に書いてないです。リファレンスには、いったいどこを見ればよいのでしょう。
まあ、それもおいおい調べていきます。
今回は、手元の古い教科書を頼りに、print文ではなく、WRITEとFORMATを使って表示をしていきたいと思います。

サンプルプログラムです。

takk@deb9:~$ cat disp.f
       A=500.5
       WRITE (*,123) A
123    FORMAT ('A=',F6.2)
       STOP
       END
takk@deb9:~$

A=500.5は、変数Aに500.5という数値を代入しています。
WRITEと次の行のFORMATはセットで使うのですが、WRITE関数の第2引数の123というのが、どの書式を使うのかの指定になります。適当に123というラベル名をつけてますが、存在しないラベルを指定してはいけません。以下のようにエラーになります。

takk@deb9:~$ gfortran disp.f
disp.f:2:72:

        WRITE (*,124) A
                                                                        1
Error: FORMAT label 124 at (1) not defined
takk@deb9:~$

ラベルなのだから文字列でもいいのかと思いきや、思いっきりエラーになります。

takk@deb9:~$ gfortran disp.f
disp.f:3:1:

 DEF123 FORMAT ('A=',F6.2)
 1
Error: Non-numeric character in statement label at (1)
disp.f:3:1:

 DEF123 FORMAT ('A=',F6.2)
 1
Error: Unclassifiable statement at (1)
disp.f:2:16:

        WRITE (*,DEF123) A
                1
Error: FORMAT tag at (1) must be of type default-kind CHARACTER or of INTEGER
takk@deb9:~$

そもそも6カラム目までは行番号を各エリアなので、整数が基本です。

桁数が多くてもエラーとなります。

takk@deb9:~$ gfortran disp.f
disp.f:2:22:

        WRITE (*,100000) A
                      1
Error: Too many digits in statement label at (1)
takk@deb9:~$

5桁までのようです。

takk@deb9:~$ cat disp.f
       A=500.5
       WRITE (*,99999) A
99999  FORMAT ('A=',F6.2)
       STOP
       END
takk@deb9:~$ gfortran disp.f
takk@deb9:~$ ./a.out
A=500.50
takk@deb9:~$

ラベルの数字は上の桁を0としても良いようです。

takk@deb9:~$ cat disp.f
       A=500.5
       WRITE (*,00009) A
00009  FORMAT ('A=',F6.2)
       STOP
       END
takk@deb9:~$ gfortran disp.f
takk@deb9:~$ ./a.out
A=500.50
takk@deb9:~$

つづく

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA