- 締切済み
BASIC→FORTRAN
DEF FNRMIN(Z)=Z-(1+SGN(ABS(Z)-SL2-.000001*SGN(Z)))*SGN(Z)*SL2 ↑このBASICプログラムからFORTRANに直すにはどのような書き方すればいいですか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- A88No8
- ベストアンサー率52% (836/1606)
ANo.2(Hayashi_Trekさん)のフォローです。 下記のプログラムで実行したところ「-2.」となりました。 ---実際のコードは、7カラム目から記述 PROGRAM t4 FNRMIN(R,S)=R-(1+SIGN(1,ABS(R)-S-.000001*SIGN(1,R)))*SIGN(1,R)*S R2=3.0 SL2=2.5 WRITE(*,*) FNRMIN(R2,SL2) STOP END --- 処理系: GNU FORTRAN 77 version 2.95
- A88No8
- ベストアンサー率52% (836/1606)
No.1を回答した「A88No8」です。 下記のプログラムでエラーは出ませんでしたよ。何のエラーが出ているのでしょう? 実行結果は、「-2.」となりました。合っているでしょうか? --- PROGRAM t2 R2=3.0 SL2=2.5 WRITE(*,*) RMIN(R2,SL2) STOP END C23456←コードは7カラム目から書くものだということを思い出すのに時間がかかりました(笑) REAL FUNCTION RMIN(R,S) RMIN=R-(1+SIGN(1,ABS(R)-S-.000001*SIGN(1,R)))*SIGN(1,R)*S RETURN END --- 処理系: GNU FORTRAN 77 version 2.95
- Hayashi_Trek
- ベストアンサー率44% (366/818)
文関数という方法もあります。 文関数は、1行FUNCTION文のような感じです。 計算式の中にSL2という変数が使われているので ZとSL2を引数にした文関数にすれば大丈夫でしょう。 こんな感じになります。(SIGN関数の使い方は自信なし) FNRMIN(Z,SL2)=Z-(1+SIGN(1,ABS(Z)-SL2-.000001*SIGN(1,Z)))*SIGN(1,Z)*SL2 と宣言して プログラム中で VAL=FNRMIN(3.0, SL2) のように使います。
- A88No8
- ベストアンサー率52% (836/1606)
orange1983さん、こんにちは Fortranは、門外漢ですが.. BASIC のDEF FN~は、関数定義です。 SGNは、符号を取り出す関数でABSは絶対値を取り出す関数です。 FORTRANでいうfunctionですので、そのまま展開したらよいのでは? real function rmin(Z, SL2) rmin=[処理ほにゃらら] return end
お礼
回答ありがとうございます。 こちらのやり方でも試してみたのですがやはりエラーが出てしまいます。 最後のRMIN=というのはRMIN変数に代入するということなんですか?
お礼
回答ありがとうございます。 上記のやり方でやってみましたがどうしてもFNRMIN(Z,SL2)で エラーがでてしまいます。 Zの中に3つの変数が入るのがだめなんですか? SL2は SL2=2.5 と定義してあります。