Fortran77のif文とend if文の個数について

このQ&Aのポイント
  • fortran77のend ifの個数について質問です。
  • 他人が作ったfortran 77のプログラムを使うことになったのですが、if文の数とend if文の数が合わずに混乱しています。
  • コンパイルも実行も出来るのですが自分の中では納得いきません。
回答を見る
  • ベストアンサー

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がないと思うのですが…なぜコンパイルがうまくいくのか教えてください。

  • tump
  • お礼率100% (3/3)

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

if-end if対応を見落としているか、単文のif文(ブロック形式でないのでend ifを必要としない)があるか、でしょう。

tump
質問者

お礼

単文のif文がありました。そのときはend ifを必要としないということをすっかり忘れていました。ありがとうございます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4835/10236)
回答No.3

else if を if と勘違いしているとか?

tump
質問者

お礼

普通のif文とブロック形式のif文を勘違いしてました。回答ありがとうございます。

  • f272
  • ベストアンサー率46% (7972/17042)
回答No.1

これではコンパイルエラーになります。 たぶん遠くの方にEND IFがあるのでしょう。

tump
質問者

お礼

回答ありがとうございます。原因はNo,2の方があげられた後者の方でした。

関連するQ&A

  • 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のコンパイルのエラーに関してはだいたいはわかっているつもりなのですが・・・ 理由がわかるかたいらしたら教えていただけませんか? よろしくお願いします。

  • if文がbegin - endな訳は?

    if 条件 > 0 then  begin   条件あり  end else  begin   それ以外。  end; Delphiでは、こうなるのですがなぜ{}を使わないのでしょうか? {}はコメントになるけど、//でも/* */ でもいいじゃないですか。 それに比べて、begin - end って面倒じゃないですか? 何かの本でif文が多いのは汚いプログラムだ、と読んだのですが、当時はPerl,PHPしか知らなかったので、それほど汚くないじゃん。と思ったのですが、Delphiを使ってみると、やっぱりif文が汚く感じます。 もちろん、コンパイルするので、書き方は開発者の自由なのは分かりますが、{}ではいけない明確な理由があるんでしょうか? 豆知識を持っている方、プログラム経験上分かった方、よろしくお願いします。

  • End Ifは不要な場合もある?

    Excel2010使用で下記のVBAのコードを書きました。 Sub イフとエンドイフは組ではなかったのか()  Dim Flag As Boolean  Dim S As Worksheet   For Each S In Worksheets    If S.Name = "合計" Then Flag = True '   Else '    Flag = False '   End If   Next S   If Flag = True Then    MsgBox "「合計」というシートはすでに存在します"   Else    Worksheets(1).Copy after:=Worksheets(Worksheets.Count)    ActiveSheet.Name = "合計"   End If End Sub 前半の >' Else >' Flag = False >' End If の部分があると「Elseに対応するIfがありません」というエラーが出ます。 Elseに関する記述だけをコメントアウトすると「End Ifに対応するIfブロックがありません」というエラーが出ます。 この部分をコメントアウトすればきちんと動作するのですが、If文はちゃんと存在しているにもかかわらず、またほとんど同じ記述の後半ではエラーが出ないというのに、なぜこのようなエラーが出るのかわかりません。 なにか勘違いをしているのでしょうか。

  • End If に対応する If ブロックがありませ

    i = MsgBox("終了しますか?", vbOKCancel) If i = vbCancel Then End End If が、 コンパイルエラー End If に対応する If ブロックがありません。 になるのですが、なぜでしょうか? If もEnd If もあるのに・・・

  • Fortran90についての質問です。

    Fortran90に関する問題です。 「正の整数mを正の整数nで割った余りrを求める手順を、組み込み関数MOD(m,n)を用いずに、単一の算術式で表せ」 このプログラム文を以下のように作成しました。ファイル名は「amari.f90」にしました。 INTEGER::m,n,f,r REAL::a,k PRINT*,'Input 正の整数' READ*,m,n a=REAL(m) k=a/n f=INT(k) IF(m>0,n>0) THEN r=m-(f*n) PRINT*,'余り=',r END IF END そして、Cygwin画面上で gfortran -o amari.exe amari.f90と打って、コンパイルしようとしたら以下のようなエラー文が出ました。 amari.f90:8.6: IF(m>0,n>0) THEN 1 Error: Syntax error in IF-expression at (1) amari.f90:11.3: END IF 1 Error: Expecting END PROGRAM statement at (1) プログラム文のどこの箇所が間違っているのかを教えていただけませんか?お願いします。

  • 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 場合わけの範囲指定の仕方が不味いのではないかと思っていますが、 どうしていいものかわからず・・ 皆様のお力を貸して下さい。

  • 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 -----------------------------------

  • #If Then ~ #Else ~ #End If(エクセルVBA)

    #If Then ~ #Else ~ #End If って何ですか? また、VBAのヘルプで検索する方法ってどうすればいいのですか? どなたか?宜しくお願い致します。

  • Excel VBA の if elseについて

     以下は与えられた自然数が素数であるかどうかを判定する、Excel VBA による素朴なコードです。  自然数が2 とそれ以上の場合で処理を分けていますが、5 行目のelseで   対応するifがないという というコンパイルエラーが出ます。私はプログラミング言語は、Pascal しか経験がなく、Pascal の場合 5 行目の else から後の処理したい複数の構文を begin end で囲めば問題なく動きます。  Excel VBA で同じ処理をさせるにはどうしたらいいのでしょうか?  Worksheets("素数").Activate  '"素数"シートをアクティブにする  Flg = 0  Target = Range("D5").Value  if Target = 2 then MsgBox ("2 は素数です。")  else  'else 対応するifがないというエラーが出る  'begin ・・・・・ Pascalの場合    K = Int(Target / 2)    ' 2 以外の素数は奇数なので偶数で割ることを確認する必要はない。    For I = 3 To K Step 2     If Target Mod I = 0 Then      Flg = 1      Exit For     End If    Next I       Snum = Format(Target)    If Flg = 0 Then     MsgBox (Snum + " は素数です。")    Else     MsgBox (Snum + " は素数ではありません。")    End If  'end ・・・・・ Pascalの場合  End If

  • 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 途中までは、こんな感じかと思ったのですが、行き詰ってしまいました。