FORTRAN(IF)

アニメ『十二大戦』
一話でぐっと引き込まれました。まさかの展開。つい続きが見たくなって睡眠時間を削ってしまいそうなので、溜めてから一気に視聴しようと思います。

さてFORTRAN、今回はIF文です。
よくありがちなプログラミング言語のif文は、こんな形かと思います。

if 条件 then
else
end if

FORTRAN(77の昔の教科書を見ています)は当然元祖なので、この形になります。しかし実際のプログラムを見てみると戸惑います。

IF (X.EQ.1) THEN
ELSE
ENDIF

括弧の中の、X.EQ.1という記述。何が書いてあるのか分かりませんでした。学生時代にもきっと学習した筈なんですが。まったく意味が分かりません。
しかし、.(ピリオド)を空白にしてもう一度見てみると、

X EQ 1

ああ、Xが1と同値の時か。案外簡単でした。ピリオドが空白になるだけで、だいぶ違って見えます。ピリオド=メンバやメソッドという固定観念が植えられてしまっているので、X.EQ.1の様な表記だとどうしても頭に入ってこないんです。でも、一回謎が解ければもう簡単です。

条件式の書き方が分かったところで、数字を入力して20より上かどうか判定するプログラムを作ってみます。

takk@deb9:~$ cat if.f
      PROGRAM MAIN
      READ (*,*) I
      IF(I.GT.20) THEN
          WRITE(*,11111)
      ELSE
          WRITE(*,22222)
      ENDIF
11111 FORMAT('I  > 20')
22222 FORMAT('I =< 20')
      STOP
      END
takk@deb9:~$

.GT.は、Greater Than(より大きい)の略です。

実行します。

takk@deb9:~$ gfortran if.f
takk@deb9:~$ ./a.out
21
I  > 20
takk@deb9:~$ ./a.out
20
I =< 20
takk@deb9:~$

条件式には以下のものがあります。

A .GT. B	Greater Than ( A > B )
A .LT. B	Less Than ( A < B )
A .GE. B	Greater than or Equal to ( A >= B )
A .LE. B	Less than or Equal to ( A <= B )
A .EQ. B	EQual to ( A == B )
A .NE. B	Not Equal to ( A != B )
A .NOT. B	not ( A not B )
A .AND. B	and ( A and B )
A .OR. B	or ( A or B )

では、もう少し複雑な式にします。20より大きく30以外の場合のみ表示するプログラムを作ります。

takk@deb9:~$ cat if.f
      PROGRAM MAIN
      READ (*,*) I
      IF((I.GT.20).AND.(I.NE.30)) THEN
          WRITE(*,11111)
      ENDIF
11111 FORMAT('I  > 20 not 30')
      STOP
      END
takk@deb9:~$ 

実行結果です

takk@deb9:~$ gfortran if.f
takk@deb9:~$ ./a.out
30
takk@deb9:~$ ./a.out
29
I  > 20 not 30
takk@deb9:~$

Leave a Reply

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

CAPTCHA