TVアニメ『このはな綺譚』PV第1弾
アニメ『このはな綺譚』
狐女子の仲居さんのお話です。癒されます。嗚呼温泉旅館泊まりたい。
FORTRAN、書式付き表示の続きです。改行の仕方がわかりました。たぶん。
前回使ったように、クォートで囲った文字列をカンマをつけて引数に指定すると、文字列が連続で表示されますね。
takk@deb9:~$ cat disp.f WRITE(*,11111) 11111 FORMAT('AAA','BBB','CCC') STOP END takk@deb9:~$ gfortran disp.f takk@deb9:~$ ./a.out AAABBBCCC takk@deb9:~$
改行にするには、カンマをスラッシュにすれば良いようです。
これは到底思いつかないです。古い教科書が頼りでした。
takk@deb9:~$ cat disp.f WRITE(*,11111) 11111 FORMAT('AAA'/'BBB'/'CCC') STOP END takk@deb9:~$ gfortran disp.f takk@deb9:~$ ./a.out AAA BBB CCC takk@deb9:~$
次は数値の書式です。FORTRANのFORMATの数値の記述子には以下があります。
整数の書式 I
実数の書式 F E G
使っていきます。整数型の記述子Iから。このような簡単なプログラムで確認します。
takk@deb9:~$ cat disp.f A=200 WRITE(*,11111) A 11111 FORMAT(I5) STOP END takk@deb9:~$
ビルドして実行してみましょう。
takk@deb9:~$ gfortran disp.f takk@deb9:~$ ./a.out At line 2 of file disp.f (unit = 6, file = 'stdout') Fortran runtime error: Expected INTEGER for item 1 in formatted transfer, got REAL (I5) ^ Error termination. Backtrace: #0 0x7f2113e68d4a #1 0x7f2113e69825 #2 0x7f2113e69f79 #3 0x7f2113f21378 #4 0x7f2113f2c636 #5 0x7f2113f2e812 #6 0x55ccfcb52985 #7 0x55ccfcb529d9 #8 0x7f21133742b0 #9 0x55ccfcb527f9 #10 0xffffffffffffffff takk@deb9:~$
なぜエラー・・・?
エラーメッセージにREALとあるので実数型になってるのでしょうか。
無理やり整数型にしてみましょうか。感です。
WRITE文で指定している変数AにINT関数を適応してみました。
takk@deb9:~$ cat disp.f A=200 WRITE(*,11111) INT(A) 11111 FORMAT(I5) STOP END takk@deb9:~$ gfortran disp.f takk@deb9:~$ ./a.out 200 takk@deb9:~$
ビルドが通ってびっくり。結果も合ってます。
INT関数で整数型になったということは、A=200は実数なんでしょうね。
整数の宣言が必要なのでしょうか。
整数の変数宣言はINTEGERを使うようです。
宣言してから使ってみます。
takk@deb9:~$ cat disp.f INTEGER A A=200 WRITE(*,11111) A 11111 FORMAT(I5) STOP END takk@deb9:~$ gfortran disp.f takk@deb9:~$ ./a.out 200 takk@deb9:~$
今度はエラー出ませんでした。
最近のスクリプトのように、変数の型宣言なしで使うのは危ないってことでしょうね。
FORTRANのことが毎日少しずつ分かってきてる気がします。
コメント