FORTRAN(変数その2)


アニメ『僕の彼女がマジメ過ぎるしょびっちな件』

ラブコメは頭を使わないので疲れを癒してくれます。

相変わらずFORTRANです。配列を使います。
配列は、変数名(添え字) で、定義します。BASICと同じですね。まあ、BASICはFORTRANの文法が基になっているようですので当然ですね。配列の添え字は1始まりです。

takk@deb9:~$ cat var.f
      PROGRAM MAIN
      INTEGER A(5)
      A(1) = 10
      A(2) = 20
      A(3) = 30
      A(4) = 40
      A(5) = 50
      WRITE(*,11111) A(3)
11111 FORMAT(I10)
      STOP
      END
takk@deb9:~$ gfortran var.f
takk@deb9:~$ ./a.out
        30
takk@deb9:~$

配列はすんなり理解できそうなので、次に繰り返しをしてみます。
DO~CONTINUEを使います。

takk@deb9:~$ cat for.f
      PROGRAM MAIN
      INTEGER A(5)
      A(1) = 10
      A(2) = 20
      A(3) = 30
      A(4) = 40
      A(5) = 50
      DO 11111 I = 1,5
          WRITE(*,22222) A(I)
11111 CONTINUE
22222 FORMAT(I10)
      STOP
      END
takk@deb9:~$ gfortran for.f
takk@deb9:~$ ./a.out
        10
        20
        30
        40
        50
takk@deb9:~$

DOで指定するのは、CONTINUEがある行のラベル名と、繰り返しの範囲です。
ラベルは必要ないような気もしますが、こんなこともできます。

takk@deb9:~$ cat for.f
      PROGRAM MAIN
      DO 11111 I = 1,2
         DO 11111 J = 1,3
             WRITE(*,22222) I,J
11111 CONTINUE
22222 FORMAT(2I5)
      STOP
      END
takk@deb9:~$ gfortran for.f
takk@deb9:~$ ./a.out
    1    1
    1    2
    1    3
    2    1
    2    2
    2    3
takk@deb9:~$

少し感動しました。FORTRANの学習を初めてよかったなあ、と。
BASICのFOR~NEXTでは、NEXTは2か所必要でしたが、FORTRANではまとめて書くことができるんです。
DOの行も範囲をすっきり指定できますし、優れた文法を持っているんですね。

あと、忘れていましたが、変数Iと変数Jについて、いつのまにか整数型になっています。
実は、I~Nで始まる変数名は、デフォルトで整数型になります。(これ以外は実数型)

takk@deb9:~$ cat disp.f
      I=100
      J=200
      K=200
      L=200
      M=200
      N=200
      WRITE(*,11111) I,J,K,L,M,N
11111 FORMAT(6(I5/))
      STOP
      END
takk@deb9:~$ gfortran disp.f
takk@deb9:~$ ./a.out
  100
  200
  200
  200
  200
  200

takk@deb9:~$

思いもよらない変数名の仕様です。古い言語ですが、新しい発見があって面白いです。

Leave a Reply

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

CAPTCHA