FORTRAN(READ)


アニメ『アニメガタリズ』

アニメが好きで世界を滅ぼすってどういうことだろう、と気になって、まず1話だけ見ました。1話だけだとよくわからないから2話、3話と見ていき結局ハマることになるのでしょうけどね。FORTRANも少しずつ学習しているうちに面白くなってきた気がします。
では、FORTRAN学習続きです。WRITE文があればREAD文もありますが、今回はREADを使っていきます。キーボードから入力するには、第1引数に*アスタリスクを指定します。第2引数は、FORMAT文がある行のラベルを指定します。

takk@deb9:~$ cat read.f
      PROGRAM MAIN
      READ (*,11111) I
      WRITE(*,22222) I
11111 FORMAT(I5)
22222 FORMAT('I =',I5)
      STOP
      END

READ文の行でキーボードからの入力待ちとなります。入力した数字が、変数Iに格納されます。
実行してみます。

takk@deb9:~$ gfortran read.f
takk@deb9:~$ ./a.out
333
I =  333
takk@deb9:~$

複数の数字を入力するプログラムに改造してみます。
きっとカンマで区切って指定すればよいかと思います。

takk@deb9:~$ cat read.f
      PROGRAM MAIN
      READ (*,11111) I,J
      WRITE(*,22222) I,J
11111 FORMAT(I5,I5)
22222 FORMAT('I =',I5,',J=',I5)
      STOP
      END
takk@deb9:~$ gfortran read.f
takk@deb9:~$ ./a.out
100
I =  100,J=    0
takk@deb9:~$

なんてことでしょう。2つの変数に入力したいのに、改行を押したとたん処理が進んでしまいました。
2回に分けないといけないのでしょうか。

takk@deb9:~$ cat read2.f
      PROGRAM MAIN
      READ (*,11111) I
      READ (*,11111) J
      WRITE(*,22222) I,J
11111 FORMAT(I5)
22222 FORMAT('I =',I5,',J=',I5)
      STOP
      END
takk@deb9:~$ gfortran read2.f
takk@deb9:~$ ./a.out
100
200
I =  100,J=  200
takk@deb9:~$

確かにREADを2回に分けると確実ですね。WRITEがカンマで区切って変数指定できるのに、なぜでしょう。
ここ数日の学習内容を見返して改行について思い出しました。FORMATをカンマの代わりに/を使えば改行になるんでしたね。使ってみます。

takk@deb9:~$ cat read.f
      PROGRAM MAIN
      READ (*,11111) I,J
      WRITE(*,22222) I,J
11111 FORMAT(I5/I5)
22222 FORMAT('I =',I5,',J=',I5)
      STOP
      END
takk@deb9:~$ gfortran read.f
takk@deb9:~$ ./a.out
100
200
I =  100,J=  200
takk@deb9:~$

感でしたが、動きました。直感で使える言語というのは優れた言語であろうと思いますが、FORTRANもそうなんですね。

Leave a Reply

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

CAPTCHA