こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

引数に関して

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

投稿日時 - 2008-07-09 15:29:39

QNo.4163246

暇なときに回答ください

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

まず、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 16:15:09

補足

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

投稿日時 - 2008-07-09 18:35:08

お礼

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

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

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

投稿日時 - 2008-07-10 21:55:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

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

投稿日時 - 2008-07-09 18:22:43

補足

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

投稿日時 - 2008-07-09 18:39:51

お礼

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

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

投稿日時 - 2008-07-10 21:52:31

あなたにオススメの質問