• ベストアンサー

引数に関して

例えば、 C,B(C),A(B)という3つの関数があるとき、 それぞれをfunctionで書こうとすると、 Bの引数は-(C) Aの引数は-(B) でいいのでしょうか!? Aのルーチンには見た目上Cはでてこないので(CはBに包括されているため)、引数はBだけでいいのでしょうか?(☆部分) 説明不足で伝わっていないといけないので、サンプル載せときます。 ☆ function func_A(B) or (B,C) implicit none real*8 func_A,func_B,B,val * B=funcB(C) * val=(1.0d0-B)*3.0d0+B*7.0d0 func_A=val return end ------------------------------------- function func_B(C) implicit none real*8 func_B,func_C,C,val * C=func_C * val=C+5.0d0 func_B=val return end ---------------------------------- function func_C implicit none real*8 val * val=3.0d0 func_C=val return end ------------------------- Aの引数としてCも載せるのが正しい気がしますが、自信がありません。ご意見聞かせて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まず、FORTRANの質問であることを明記しましょう。 継続的な質問を繰り返しているようですが、何件かもらっているアドバイスで理解できないなら、書籍を買うか借りるなどして、まずは引数についてしっかりと勉強しましょう。 COMMON文を使わなければ、メインとサブルーチン、関数の間では、引数でやり取りすることになります。 引数は、名前でなく、引数の並び順で対応付けられます。(注1) 例1 <メイン> X=FUNC1(A,B) <関数> FUNCTION FUNC1(C,D) Y=FUNC2(E) FUNCTION FUNC2(F) この場合、メインの変数A、Bは、FUNC1の変数C、Dと対応します。また、FUNC1の変数EとFUNC2の変数Fが対応します。 FUNC1を呼ぶには、メインの変数A、Bに、メイン内で値を入れておく必要があります。 また、FUNC1からFUNC2を呼ぶには、FUNC1内で変数Eに値を入れておく必要があります。 また、引数のない関数は、FUNC() のように、()を指定しないと、FUNCという別の変数として扱われたと記憶しています。 注1 FORTRAN90(?)くらいでは、引数の並び順でなく、名前での対応付けも可能になっているようです。 ちょっと確認したところ、FUNCTION FUNC1(X=A,Y=B) というような指定をするらしいです。

BOY12345
質問者

お礼

新たに一冊本を借りてきました。 これが、なんと驚き!! 先生に借りた本より断然わかりやすかった☆ 『先生がくれたのが一番わかりやすいだろう』という、思い込みから解き放たれました♪ 本に、こう書いてありました!! 『何でもやってみること ーーーまちがえても爆発の危険はない!!  遠慮しないで他人に聞くこと ーーー本に書いてないことがたくさんある』 このサイトは最高です。日々成長していきたいと思います。 これからもよろしくお願いします。

BOY12345
質問者

補足

テキストは一冊持っていますが、読むだけでは理解できないので、自分で少しずつ理解のための簡易プログラムを作って、トライ&エラーで勉強しています。周りに理解している人がおらず、独学でやってます。 アドバイスありがとうございます。 相当助かってます。めげずにがんばります☆

その他の回答 (1)

  • equinox2
  • ベストアンサー率48% (321/660)
回答No.2

これでは前の質問同様、まったく理解できていないのだと思われます。 ANo.1の方と同様の意見ですがFORTRANの文法を勉強しましょう! サンプルで説明すると、 ・ func_A() は変数BもCも渡す必要はありません。   Bはfunc_B()の戻り値でfunc_Aにとっては単なる計算の途中結果のため ・同様にfunc_B()は 変数Cを渡す必要はありません。   Cはfunc_C()の戻り値でfunc_Bにとっては単なる計算の途中結果のため   注:但し、func_Aを呼び出すmainで、B,Cの値が必要ならば渡す(もらす)必要があります。

BOY12345
質問者

お礼

自分の勘違いに気付きました。 引数には当然、Bはいらないですね。 上のプログラムだと、func_Aでの定義に real*8 Cを追加しないと、エラーになりますよね。 前進できてよかったです。ありがとうございます。

BOY12345
質問者

補足

文法の勉強不足ですか・・ はい、勉強しなおします。 貴重なアドバイスありがとうございます。 mainでB,Cが出てこないなら(必要ないなら)、引数渡しはいらず、必要なら渡さないといけない・・と(ノートにメモしときます♪) 目を通して頂き、ありがとうございます☆

関連するQ&A