![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
fortran90を始めて間もない者です。
メインプログラムより呼び出しているサブルーチンにユーザ関数を渡しています。
このサブルーチンを自前で作成するのが目的です。
引数で受け取った関数を、自前の別関数より呼び出すにはどうしたら良いでしょうか。
Cであれば関数のポインタをグローバルな変数にセットしてやれば可能だと思いますが・・・
!--------------------------------
subroutine sub(func1, a)
real::a
interface
real function func1(x)
real::x
end function func1
real function func2(x)
real x
end function func2
end interface
call sub2(func2, a)
write(*,*) a
return
end subroutine sub
!--------------------------------
real function func2(x)
real::func2, x
! ここでfunc1を呼び出したい
! func2=func1(x)
end function func2
!--------------------------------
subroutine sub2(funca, a)
real::a
interface
real function funca(x)
real::x
end function funca
end interface
a=funca(10.)
return
end
!--------------------------------
program main
external func
real a
call sub(func, a)
write(*,*) a
end program
!--------------------------------
function func(x)
real func, x
func=2.*x*x
end function func
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
全然,何をやりたいのかが分からん。
とりあえずサンプルを見せるから,考えてみてね。
program main
external funca,funcb
real a, b
a=3.
call sub(funca,a)
write(*,*) a
b=4.
call sub(funcb,b)
write(*,*) b
end program
!--------------------------------
subroutine sub(func,x)
real x
interface
real function func(x)
real x
end function func
end interface
x=func(x)
return
end subroutine sub
!--------------------------------
real function funca(x)
real x
funca=2.*x*x
end function funca
!--------------------------------
real function funcb(x)
real x
funcb=3.*x
end function funcb
この回答への補足
説明不足でした。すいません。
ラッパーを作っています。
ユーザ関数が引数により渡されるのですが、実際に使用する関数の引数並びが異なっています。
その為、渡されたユーザ関数を実行する別のユーザ関数を作成しています。
fortranでは無理そうなのでCで実現しました。
float (*funcp)(float);
float execfunc(float);
void setfunc_( float (*func)(float) )
{
funcp=func;
}
float execfunc_(float x)
{
float ret;
ret = funcp(x);
return ret;
}
以上、自己解決しました。
ありがとうございました。
No.1
- 回答日時:
なんで sub2 に (sub で受け取った) func1 を渡さないのか. 現状のまま Fortran90 で動かすのは無理のよ
うな気がする. 2003 以上ならまさに「関数 (というか外部手続) へのポインタ」が使えそうなんだけど.この回答への補足
sub2で呼び出しているfunc2はfunc1とは異なる引数で作成したかったのです。
説明不足ですいません。
こんな感じです。
!--------------------------------
real function func2(x, y)
real::func2, x, y
real a, b
! ここでfunc1を呼び出したい
a=func1(x)
b=func1(y)
func2=a+b
end function func2
!--------------------------------
subroutine sub2(func2, a)
real::a
interface
real function func2(x, y)
real::x, y
end function func2
end interface
a=func2(10., 20.)
return
end
----------------------------------
もう少し考えて、無理そうならC言語で一部作成しようと思います。
ちなみにsubの中でfunc1を呼び出すentryを定義してみましたが実行エラーとなりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- UNIX・Linux gawk 3 2022/08/18 14:07
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Ruby 教えてください 2 2023/01/04 17:50
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
jQueryの :not() .not() が有効...
-
idを使わずにonclickで自身の要...
-
Javascriptのオブジェクト指向...
-
Javascriptで文字列操作
-
fortran90 引数で渡された関数...
-
jslintのエラーについて質問
-
javascriptのソースでvar resul...
-
Jqueryのanimateのオプションに...
-
google apps scriptの終了のさせ方
-
window.openでタイトル名の指定
-
同じIDで定義した要素の配列を...
-
ActiveXobjectが作成できない
-
ASP.NET MVCでObjectをjsに渡す
-
HTMLで作った時報アプリが動き...
-
C#OpenCv V4にのエラーに関する...
-
○歳△ヶ月と×日を計算してくれる...
-
APIを使って埋め込んだグーグル...
-
ASP+アクセスでのSQLコメントに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jQueryの :not() .not() が有効...
-
jslintのエラーについて質問
-
クリックすると上に開くアコー...
-
関数名をテキストから読み込む...
-
XMLHttpRequestでキャッシュを...
-
getElementByIdを使用したグロ...
-
jQueryの"return false"の役割...
-
JAVAスクリプトで指定時間以降...
-
JavaScriptの日付の比較
-
XMLHttpRequestオブジェクトが...
-
jQueryでzipを解凍読み込みする...
-
コードをスマートにさせたい。
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
javascriptのソースでvar resul...
-
ajax反映後のjqueryが動かない
-
(function(){})()の意味
おすすめ情報