TVアニメ「十二大戦」第3弾PV
アニメ『十二大戦』(2017)
一話でぐっと引き込まれました。まさかの展開。つい続きが見たくなって睡眠時間を削ってしまいそうなので、溜めてから一気に視聴しようと思います。
さて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:~$
コメント