• 締切済み

BASIC→FORTRAN

DEF FNRMIN(Z)=Z-(1+SGN(ABS(Z)-SL2-.000001*SGN(Z)))*SGN(Z)*SL2 ↑このBASICプログラムからFORTRANに直すにはどのような書き方すればいいですか?

みんなの回答

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.4

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% (834/1602)
回答No.3

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

回答No.2

文関数という方法もあります。 文関数は、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) のように使います。

orange1983
質問者

お礼

回答ありがとうございます。 上記のやり方でやってみましたがどうしてもFNRMIN(Z,SL2)で エラーがでてしまいます。 Zの中に3つの変数が入るのがだめなんですか? SL2は SL2=2.5 と定義してあります。

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

 orange1983さん、こんにちは  Fortranは、門外漢ですが..  BASIC のDEF FN~は、関数定義です。  SGNは、符号を取り出す関数でABSは絶対値を取り出す関数です。  FORTRANでいうfunctionですので、そのまま展開したらよいのでは? real function rmin(Z, SL2) rmin=[処理ほにゃらら] return end

orange1983
質問者

お礼

回答ありがとうございます。 こちらのやり方でも試してみたのですがやはりエラーが出てしまいます。 最後のRMIN=というのはRMIN変数に代入するということなんですか?

関連するQ&A

  • FORTRANの絶対値についてです。

    FORTRANでの絶対値はabsでできますよね。それなんですが、使い方が調べてもよくわかりません。 t=|xの平均-yの平均|をプログラムにするならば t=abs(xの平均-yの平均)とすればいいのですか? よくわからないので教えてください。

  • Fortranとgnuplotについて困っています

    Fortranとgnuplotについて困っています こんにちは。 現在、Fortranプログラミングでgnuplotを使用した座標出力プログラムを考えているのですが、いまいちわかりません。 中心(0,0,0),半径1の級の球面上の座標を出力するプログラムを考えています。その際 ・z>=0のときだけでよい ・gnuplotで確認できる ・Fortranのプログラムファイルでまとめる。 以上を満たすものを考えています。内容自体は基本的なことだとは思いますが、いまいち勝手がわからず困っています。 拡張子.f90でどのようなファイルを作ればいいのか教えていただければ幸いです。

  • 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だけで書いています)です。

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • Fortranについて

    私は今大学生のものです。 今卒業研究でFortranのプログラムを用いています。しかし私はプログラミングには疎く、独学で勉強しようと思うのですがなにか初心者にわかりやすいお勧めの本、サイトなどはあるでしょうか? 本屋に行ってもFortranの本は販売されておらず、通販では手にはいるのですがどの本がいいのかわかりません。是非教えていただければと思いここに書き込ませていただきました。 また、家でもFortranのプログラムをコンパイル、実行できる環境をつくりたいのですがどうすればよろしいでしょうか? 学校ではcygwinをインストールして行っていますが家でもcygwinをインストールすればいいのでしょうか? また今もととなるプログラムはあるのですがこのプログラムはLinux上では正常にコンパイルされないところがあるらしく書き直さなければならないらしいのですがLinux上でのFortranのプログラムは普通のFortranのプログラムとは違うのでしょうか?ちなみに学校のパソコンのOSはWindows Vistaです。 初心者の質問ばかりになってしまってすみません。自分でしっかり学びたいと思うのでぜひ教えてください。

  • MS-FortranとFortran90

    私は研究でFortran90を使っているのですが、研究に使うプログラムはMS-Fortranを用いて書かれているものでした。 そこで質問なんですが、MS-FortranとFortran90の違いについて知っている方がいれば教えてください。 また、MS-FortranでかかれたソースコードをFortranにコピーした時に何か弊害はあるのでしょうか?(人づてに弊害が起こると聞いたことがあるのですが・・・)。 プログラミングを本格的に始めて、まだ3ヶ月ほどで用語の使い方がわかりにくいところがあるかもしれませんがよろしくお願いします。

  • BLOCK構造体とFORTRAN

    fortranでプログラムを組むことになったのですが、これまでプログラムを組んだことがなかったので困っています。 gridgenで作成した.grdファイルをfortranで読み込ませることがうまくできません。 原因は、.grdのフォーマットがBLOCK構造体であるからだと考えています。 POINT構造体なら読み込めることが分かっているのですが…。 そこで質問です。 BLOCK構造体である「.grd」ファイルを読み込み、POINT構造体の「.dat」ファイルを出力するプログラムをfortranで組むにはどうしたらいいですか? BLOCK構造体とは以下の形式。 X1 X2 X3 X4 X5 …Xn Y1 Y2 Y3 Y4 Y5 … Yn Z1 Z2 Z3 Z4 Z5 … Zn POINT構造体は以下。 X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 X4 Y4 Z4 X5 Y5 Z5 … … … Xn Yn Zn

  • FORTRANについて

    今、大学の研究室でFORTRANの勉強をしています。そこで、院生から問題を出されました。それは、 テキストファイルから数字を読み込み、それらをFORTRANの中で計算し、その答えをまたテキストファイルに出力する、というプログラムです。 計算するところまではできたのですが、どうしてもテキストファイルに出力するプログラムがわかりません。 出力の仕方だけでも教えてください。教科書にもなく、図書館でも古い時代のものばかりで。しかも、僕は学校の関係でFORTRANを全く知りません。

  • fortran

    fortranでn次正方行列の対角要素の和を求める関数副プログラムを作ろうと思います。 fortran初心者で、何から始めていいのかさっぱりワカリマセン。 ヒント・アドバイスがあればよろしくお願いいたします。

  • fortran90

    fortran90 現在 fortran90 で計算プログラムを作っております。 プログラムはかけたのですが、実行画面にエラーが出ます。 解決方法が分かりません。どなたか分かる方いらっしゃいますか。 プログラム implicit real*8 (a-h,o-z) parameter(n=900) open (1,file='004.txt',status='old') do 10 i=1,n read (1,*,end=11)xx,yy,zz,ww theta=acos(zz) phi1=acos(xx/sqrt(1-zz*zz)) phi2=asin(yy/sqrt(1-zz*zz)) write(*,*)theta,phi1,phi2 10 continue 11 end プログラム内容 あるフォルダーに保存してあるテキストファイルから4×4行列のデータを読み込み、そのデータからθの値とφ1、φ2のアタを求めるプログラムです。 実行分のエラー画面には、 acos: DOMAIN error です。

専門家に質問してみよう