FORTRAN(関数)

旧2-5. Fortran毎日学習
「Infini-T Force(インフィニティ フォース)」メインPV

アニメ『Infini-T Force(インフィニティ フォース)』(2017)

かっけぇっす。
ギャラクター、健在です。しかも冒頭から原子力空母かっぱらってます。
各ヒーローたちも含め人の表情が硬いってところはありますが、ヒーローのアクションが目当てなので気にしません。私はガッチャマンよりもテッカマンが好きだったのですが(特にテッカマンの変身シーン、毎回ぞくぞくしていました)、性格を加味して破裏拳ポリマーが一番まともかも。ガッチャマン一号のケンってこんなうざかっただろうか。。。自分の記憶している主人公たちとのギャップもあって楽しいです。

FORTRAN続きです。 今回は関数です。
関数は、FUNCTIONですが、まずはサブルーチンから使います。サブルーチンを作るには、SUBROUTINEを使います。

takk@deb9:~$ cat sub.f
      PROGRAM MAIN
      CALL HELLO
      STOP
      END

      SUBROUTINE HELLO()
      WRITE(*,11111)
11111 FORMAT('HELLO')
      RETURN
      END

takk@deb9:~$

サブルーチンHELLOを実行するには、CALLが必要みたいです。そしてVBのSUBの元はSUBROUTINEだったということも分かりました。
ではプログラムを実行してみます。

takk@deb9:~$ gfortran sub.f
takk@deb9:~$ ./a.out
HELLO
takk@deb9:~$

次は関数です。関数はFUNCTIONで定義します。戻り値を設定するには、関数名に代入してやればよいです。VBと同じですね。

takk@deb9:~$ cat func.f
      PROGRAM MAIN
      READ (*,*) I,J
      K=ADD(I,J)
      WRITE(*,11111) K
11111 FORMAT(I5)
      STOP
      END

      FUNCTION ADD(I,J)
         ADD = I + J
         RETURN
      END

takk@deb9:~$

実行結果です。

takk@deb9:~$ gfortran func.f
takk@deb9:~$ ./a.out
10,20
   30
takk@deb9:~$

次は、またサブルーチンですが、引数ありのサブルーチンです。

takk@deb9:~$ cat sub.f
      PROGRAM MAIN
      READ(*,*) I,J
      CALL ADD(I,J,K)
      WRITE(*,11111) K
11111 FORMAT(I5)
      STOP
      END

      SUBROUTINE ADD(I,J,K)
      K = I + J
      RETURN
      END
takk@deb9:~$ 

これはスゴイです。C言語ばかりやってきた私としては、ポインタや参照を使わないのに引数で戻り値を返せるというところにびっくり。いろんな言語の祖先だけあってFORTRANは結構柔軟にできてるんですね。
実行結果です。

takk@deb9:~$ gfortran sub.f
takk@deb9:~$ ./a.out
11,22
   33
takk@deb9:~$

コメント

タイトルとURLをコピーしました