さて前回は40年以上ぶりでFORTRANでHELLO WORLDするのにPRINTなどと書いてしまいました。遥かな太古、WRITE文に漏れなくFORMAT文がついてきた記憶。今回は出力WRITEに加え、文関数の定義、DO文、FORMAT文など使って計算してみますぞ。ちょっとはFORTRANの雰囲気出てきた?まだまだ。
※実機動作確認には以下を使用しております。
-
- Windows 11 PC (i5-1235U)
- Ubuntu 24.04 LTS on WSL2
- QEMU 8.2.2
- FreeDOS 1.3
- OpenWatcom FORTRAN 77 Version 1.9
出力デバイス
そういえば最初に触った古代のFORTRANでは、入出力をするのにデバイス(素っ気なく番号で呼ばれていた)を指定せねばならず、朧気な記憶によると
-
- 5番、カードリーダ(80カラムの紙カードだよ~)
- 6番、ラインプリンタ(1行百何十文字だったっけ?)
だったような。さて、今回古式ゆかしくWRITE文で出力するためにWatom FORTRANのドキュメントを漁ったところ、6番にWRITEすると標準出力に出力されるみたいです。やったね、以下の形式でよいみたい。
-
- WRITE(6, FORMAT文の番号) チョメチョメ
でも「6」とデバイス番号書いても、実は「*」と同じに解釈されているみたい。だったら * でよろしいか。なお、6以外、8とか書くとファイル出力になるようです。また今度ね。
今回練習用のソースプログラム
WRITE文、FORMAT文、文関数定義、DO文など盛り込んだソースが以下に。
C 1 2 3 4 5 6 7 C23456789012345678901234567890123456789012345678901234567890123456789012 CnnnnC.................................................................. PROGRAM FUNC0 INTEGER I REAL MYFUNC, A, X, Y, Z MYFUNC(A)=A*0.33 WRITE(6, 300) 300 FORMAT(5X,1HX,9X,1HY,9X,1HZ) DO 100 I=0, 10, 1 X = 0.1 * I Y = SIN(X) Z = MYFUNC(X) 100 WRITE(6, 200) X,Y,Z 200 FORMAT(3F10.3) STOP END
何だか一気にFORTRAN風味がました感じがいたします。気のせいか?
なお、Watom FORTRANのドキュメントによると行頭のコメント文を示すCは、*でも良いし、小文字の c でも許されるみたい。まあ、伝統と格式を重んじるのでCで行くけど。
しかしな、FORMAT文、昔はこんなメンドイこと書いていたんだっけ。
コンパイルしてGO
さてビルドは以下で一撃です(DOS用の16ビット EXE 形式出力の場合。)
wfl /l=dos func0.for
段々記憶が蘇ってきた? 最近のことは直ぐに忘れるけど、昔のことは覚えているからな。ホントか?全部忘れてるんじゃないか?