• ベストアンサー

fortranの関数?

colderの回答

  • ベストアンサー
  • colder
  • ベストアンサー率43% (30/69)
回答No.4

配列の宣言がないのなら、文関数の可能性が高いです。

hammn
質問者

お礼

ご回答ありがとうございます! 文関数というものがあるのですね!最初の記述も型宣言の次に書いてあるため,これのような気がします! どうもありがとうございます! しかし,やはり気になるのは, BFUNC(S) = S では,そのままS使えばいいのにという疑問が残ります・・・.

関連するQ&A

  • fortranのプログラム

    fortranのプログラム 現在、fortranの勉強をしております。 そこで、質問があるのですが、 ある関数f(x,y,z)の座標(x,y,z)の値がデータとして与えられているとき、 S=10+f をfortranで計算したいと考えております。 ただ、関数fは複数(f1、f2、f3)あり、次々とfに代入してSを計算したいのですが、どのようにプログラムしたらいいか思いつきません。 どなたか、ヒントだけでもいいので、教えてください。 ちなみに、私が考えたプログラムは(下のプログラムはポイントだけ書いてあります。endやその他関係ないと思われるところは省いております。) do 100 k=1,3 S=S+fk(x,y,z) continue function f1 f1(s,t,u)=・・・ return end f2(s,t,u)=・・・ return end 使用しているバージョンは、fortran77(本当は90を使っているのですが、77だけで書いています)です。

  • fortran77で乱数を発生させたい

    fortran77で乱数を発生させたい こんばんわ。fortran77で乱数を発生させるにはどうすればいいのでしょうか? 調べてみるとfortran90ならば乱数の組み込み関数が用意されているようなのですが、fortran70にはないそうです。   real function random(i)    i=843314861*i+453816693    random=real(i)/2**31   end function   do 10 k=1,n    ransu(k)=random(i) 10 continue これを用いることで乱数が発生できると書いてあったのですが、オーバーフローしてしまったせいか、値がマイナスのものが出てきてしまい、うまくできませんでした。 これ以外にも方法はないでしょうか? 私の環境はsalford FTN77です。 回答よろしくお願いします。

  • Fortranでの記号「./」について

    Fortran 90で書かれた数値計算プログラムを、より専門的な言語に書き換える作業を行っています。 Fortranを学んだことがないのでインターネット等で関数の意味や書式を調べながら作業しているのですが、 「X./Y」という式の意味がわからずに困っています。 単純に「X/Y」とはどう違うのでしょうか。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • FortranプログラムからC言語で実装された関数を呼ぶには?

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか? ユーザーガイドによれば、「Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになり、C側では、#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことができる。」とのことがかかれています。 実際に使っているファイルをいくつか書き出します。 <D:\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • Fortran のコードについて

    古いフォートランのコードで、Cに直したいのですがコードが読めません。色々ウェブで調べてみましたが、コード自体に疑問を持っているので質問したいと思いました。 以下コードです。 FUNCTION RAND(K) INTEGER K, M, CONST1 REAL RAND, CONST2 PARAMETER (CONST1 = 2147483647, CONST2 = .4656613E-9) SAVE DATA M /0/ IF(M .EQ.0) M = K M = M * 65539 IF(M .LT. 0) M = (M + 1) + CONST1 RAND = M*CONST2 END 以下私の理解している事: 参考にしたページ: http://www.g.dendai.ac.jp/lecture/fortran/fort12.html 任意のKが関数に渡される。 関数は K*65539*CONST2をいつも返す。 私の疑問点は、どうして型宣言が行われていないのか? どうして関数は特定の値をいつも返すのに、IFの分岐が必要なのか?という事です。 私の理解していることが間違っているのでしょうか。 困ってます。アドバイスをよろしくお願いしますm(__;)m

  • c言語 関数宣言

    c言語で書かれたプログラムを見ていると、ちょっとわからない関数宣言がでてきました。 関数宣言をしているのだと思うのですが、これはいったいどういうことなのでしょうか。 grad_pf(x, a, yfit, dyda, ma) float x; float a[]; float *yfit; float dyda[]; int ma; {            処理・・・・・・・・ } 中括弧の前で宣言された変数はどういったものなのでしょうか。 よろしくお願いいたします。

  • FORTRAN の引数について

    FORTRAN の引数について FORTRANからCへの移植のため解析中なのですが引数の宣言について教えてください。 SUBROUTINEで次のような関数の時、引数の表現はどういった意味を表しているのでしょうか? SUBROUTINE AA(VAL1,VAL2,VAL3,VAL4,*,*,*) CALL AA(VALUE1,-5.D-03,5.D+04,1.D+00,*100,*3,*1) 引数はREAL型でこの時の2~4番目の表現と5番目以降の*付の数字の意味です。 ちなみにCALLは数箇所で呼ばれており、その度に*100以外の部分は宣言が 変わっています。

  • fortran77教えてください

    fortran77のプログラムについての質問です。 次のプログラムを実行するとどのような結果になるか教えてください REAL A,B,C,D,E,F A=7.0 B=5.0 CALL WASA(A,B,C,D) CALL WASA(C,D,E,F) WRITE(*,*)E,F STOP END SUBROUTINE WASA(P,Q,R,S) REALP,Q,R,S R=P+Q S=P-Q RETURN END

  • fortran90 引数で渡された関数の呼び出し

    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

  • fortranでx=1としても0.9..が入る

    fortranで以下のようなプログラムにてxに1.0^-6を代入し、 その中身を表示しました。 --------------------------------- program test real(8) :: x = 1.0d-6 write(*,*) x write(*,*) x * 1.0d6 write(*,*) int(x * 1.0d6) end program test --------------------------------- しかし、結果は以下のようになり、 0.999999999999999955^-6となってしまいます。 さらに、やっかいなことに10^6倍して 整数型に変換しても0と認識されてしまうのです。 ---------------------------------- $ ./a.exe 9.99999999999999955E-007 1.00000000000000000 0 ---------------------------------- 変数の型も倍精度で宣言し、定数も倍精度(d付き)で 代入しているはずなのですが、なぜこのような現象が 起きるのでしょうか。 ご存知の方いましたら教えて頂けると助かります。 なお、コンパイルはgfortranで行っています。