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:~$
つづく
コメント