重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

例えば、
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も載せるのが正しい気がしますが、自信がありません。ご意見聞かせて下さい。

A 回答 (2件)

まず、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) というような指定をするらしいです。

この回答への補足

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

補足日時:2008/07/09 18:35
    • good
    • 0
この回答へのお礼

新たに一冊本を借りてきました。
これが、なんと驚き!!
先生に借りた本より断然わかりやすかった☆
『先生がくれたのが一番わかりやすいだろう』という、思い込みから解き放たれました♪

本に、こう書いてありました!!
『何でもやってみること
ーーーまちがえても爆発の危険はない!!
 遠慮しないで他人に聞くこと
ーーー本に書いてないことがたくさんある』

このサイトは最高です。日々成長していきたいと思います。
これからもよろしくお願いします。

お礼日時:2008/07/10 21:55

これでは前の質問同様、まったく理解できていないのだと思われます。


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の値が必要ならば渡す(もらす)必要があります。

この回答への補足

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

補足日時:2008/07/09 18:39
    • good
    • 0
この回答へのお礼

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

前進できてよかったです。ありがとうございます。

お礼日時:2008/07/10 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!