• ベストアンサー

fortran if文

fortranのif文で、以下の様に場合わけしてプログラムしたのですが、 このようなエラー文が出ます。どう対処したらいいのか教えて下さい。 Error: An unterminated block exists. プログラム↓ if(-0.5d0.LE.theta.LE.0.0d0) then eta=2 if(0.0d0.LT.theta.LT.0.5d0) then eta=5 if(0.5.LE.theta.LE.1.0d0) then eta=3 場合わけの範囲指定の仕方が不味いのではないかと思っていますが、 どうしていいものかわからず・・ 皆様のお力を貸して下さい。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

たぶん、こういうことではないでしょうか。 if(-0.5d0.LE.theta.LE.0.0d0) then eta=2 else if(0.0d0.LT.theta.LT.0.5d0) then eta=5 else if(0.5.LE.theta.LE.1.0d0) then eta=3 end if

BOY12345
質問者

お礼

うまいこといきました☆ ありがとうございます♪

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ついでにいうと if の条件もおかしい気がする. .LE. などの比較演算子は non-associative だったと思うんだが.

関連するQ&A

  • fortran if文

    以下のコードで、xとthetaに5,5と入力しても、出力が5となってしまいます。500になってほしかったんですが・・・ どこが悪いのか教えて下さい。 ----------------------------------------------- read(5,*)x,theta if(0.0d0.LE.x.LE.4.0d0) then eta=theta go to 20 else if(4.0d0.LT.x.LT.7.0d0) then eta=100.0d0*theta go to 20 else if(7.0d0.LE.x.LE.10.0d0) then eta=sqrt(3.0d0*sqrt(2.0d0))*theta go to 20 end if 20 write(6,30) eta 30 format(F10.5) stop end -----------------------------------

  • Fortranプログラム-if文について

    仕事の関係で他人の作ったプログラムを使用することになりました。 使用するプログラムはFortran77で書いてあるのですが,if文の記述方法が 私の馴染みのない書き方になっています。 ----------------------------------------------------------------------- ・ ・ ・ IF (X-FN-6.) 11,33,33 33 a = a+1 11 NX = FN ・ ・ ・ ----------------------------------------------------------------------- 例えば,上記のようなIF文があった場合の解釈を教えていただければと思います。 基本的なことで申し訳ないですが,よろしくお願いします。

  • fortranのif文にでるエラーがわかりません。

    c termination test sorce=amax1(resorm,resoru,resorv) 310 if((niter.eq.20.and.sorce.gt.1.0e7*sormax) & .or.(niter.eq.maxit)) then write(6,320) 320 format & (1h ,'solution diverges or needs more iterations'/) if(sorce.gt.sormax) go to 300 c----- end of iterations 文献に載っていたプログラムのメインプログラムの一部です。 310のif文に対してでるエラーの意味が どうしてもわかりません。 fortranのコンパイルのエラーに関してはだいたいはわかっているつもりなのですが・・・ 理由がわかるかたいらしたら教えていただけませんか? よろしくお願いします。

  • fortran77でのif文

    FORTRAN77の問題の質問です。 授業でこんな問題が出て困ってます。 あるクラスにN人います。 そのクラスの平均身長がXです。 そのN人の中で、X以上の身長の人数Aを印刷するプログラムを作れと言う問題です。 ここで、IF~THENを使いなさい。 分かる人がいたら教えてください。 PROGRAM TEST7 WRITE(*,*)\'x人分の身長データを入力 READ(5,*)x WRITE(*,*)\'身長のボーダーラインを入力\' READ(5,*)G A=A-G B=B-G C=C-G D=D-G E=E-G F=F-G IF(A.GT.0) THEN STOP END 途中までは、こんな感じかと思ったのですが、行き詰ってしまいました。

  • fortran77のend ifの個数について質問です。

    他人が作ったfortran 77のプログラムを使うことになったのですが、if文の数とend if文の数が合わずに混乱しています。コンパイルも実行も出来るのですが自分の中では納得いきません。具体的に言うと、 =============== if (aa.gt.bb) then  計算 if (cc.gt.dd) then  計算 else  計算 end if  計算 if (ee.gt.ff) then  計算 end if =============== と言った具合です。この場合1つめのif文に対応するend ifがないと思うのですが…なぜコンパイルがうまくいくのか教えてください。

  • fortranのif文で・・・

    フォートランの if文で IF(M-1) 15,15,12 ってのがあるんですが,これはどういう意味を表しているのでしょうか ? IF(R.LE.0.D0) THEN ・・・・ ならRが0より小さいときは・・・・しなさい.って命令ですよね. でもうえのは,カッコの中がいったいどういうときならってのを表してるのかも分からないし,15,15,12 ってのも意味がわかりません. 基本的なことかもしれませんが,よろしくお願いします. 一応その部分のプログラムも載せておきます. X(N+1)=X(1) Y(N+1)=Y(1) DO 10 I=1,N XM(I)=(X(I)+X(I+1))/2 10 YM(I)=(Y(I)+Y(I+1))/2 IF(M-1)15,15,12 12 XM(NC(1))=(X(NC(1))+X(1))/2 YM(NC(1))=(Y(NC(1))+Y(1))/2 DO 13 K=2,M XM(NC(K))=(X(NC(K))+X(NC(K-1)+1))/2 13 YM(NC(K))=(Y(NC(K))+Y(NC(K-1)+1))/2 15 CONTINUE

  • IF文での条件の書き方について(fortran)

    条件 (1)exp(-at)<x  (2)exp(-bt)<y と二つの条件があるとする. (a,b,x,yは定数とし,tは時間でdo文でまわすとする) 例えば,IF( (1) .AND. (2) )THENとすれば,「(1) かつ (2)」となり,つまり,「時間的に,(1)・(2)がどちらが先に条件を満たしたとしても良い」とういうことですよね. 今回,私が作ろうとしているプログラムは 「(1)が先に条件を満たした後に,(2)の条件を満たすなら」というIF文を作りたいのです.( (2)の条件が先に満たしてしまう場合は除きたいということです) こういう場合はどういった表記をすればよいのでしょうか. 下手な文章で読みにくいかもわかりませんが,アドバイスをお願いいたします.

  • fortran

    fortran に関して質問です。 expに関するものです。 自分の認識としては、 expはドメインエラーが無い(値にNaNを放り込まない限り) と考えています。 プログラムを走らせていたら、 -exp : OVERFLOW error と表示されました。 問題の箇所はexp(val3)で、valはreal8です。 val3の計算が仮にNaNだとすると、expのoverflowではなく、domain errorと表示されると思うので、val3はある値を有していると思っています。 val3の計算をした後に、 if(val3 .gt. 1.0d307) val3=1.0d307 if(val3 .lt. -1.0d307) val3=-1.0d307 if(abs(val3) .lt. 1.0d-307) val3=0.0d0 としているので、問題ないのでは・・と思ったのですが・・ overflowなので、va3=1.0d307で処理されたと考えるのが妥当で、そうすると、expが半端なく大きな値になる⇒overflowになった。と考えています。exp内はどのくらいの値までなら大丈夫なのでしょうか? 考え方に問題がある場合なども、遠慮なく言って下さい。自分のためになりますので・・

  • IF文のよる瞬停

    MORISEIKIのNV5000(制御盤FUNUC MSX-501)にてカスタムマクロを使用していますが、 下記のIF文で瞬停の現象が起こりスムーズに動きません。 同プログラムで三菱(MELDAS)の制御盤MCではスムーズに動くのですが、、、 G08P1 先行制御をマクロ前に指令しても変わりません。 ; IF[[[#22/2]-#18]GE#29]THEN#33=0 IF[[[#22/2]-#18]LT#29]THEN#33=[#29-[[#22/2]-#18]] IF[[#29*2]GE#22]GOTO123 ; IF文が3行続くとFUNUCでは厳しいのでしょうか? プログラム記憶容量(メインファイル)が標準の128KBなのでできるだけ コンパクトにしたいのですが、、、、 宜しくお願い致します。 IF文による瞬間停止の間違いです。 瞬時停電とは違います。(誤使用で申し訳ありません)

  • 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のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

専門家に質問してみよう