• 締切済み

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

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

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

負なら行番号11へ、零なら行番号33へ、正なら行番号33へ飛べ

Tsunami2000
質問者

お礼

ありがとうございます。 この様な書き方があるんですね~ 勉強になりました。

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  下記サイトをご参照下さい。   http://questionbox.jp.msn.com/qa376236.html?StatusCheck=ON   「算術if文」だと思います。 では。

Tsunami2000
質問者

お礼

同じ疑問を持った方が。。。 こちらの質問箱も参考にさせていただきます。 ありがとうございました。

関連するQ&A

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

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

  • Do文で副プログラムの増やす【Fortran】

    Fortranを使用してます。 DO文で副プログラムをループさせて増やしたいのですが、どうすればいいか分りません。 具体的には、副プログラムの「SUBROUTINE」文+サブルーチン名 であるサブルーチン名の後にループを使って番号を付けたいのですが・・・ 簡易なイメージとして以下のソースでtest0、test1、test2、・・・・・test10となるようなサブルーチン名にしたいのです。 do x=0,10 SUBROUTINE test+x y=x+10 retun end end do Fortran初心者ですが、解決したいので難しい解説でも大丈夫です。 分る方は宜しくお願いいたします。

  • 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)の条件が先に満たしてしまう場合は除きたいということです) こういう場合はどういった表記をすればよいのでしょうか. 下手な文章で読みにくいかもわかりませんが,アドバイスをお願いいたします.

  • if文の中のif文・・・について

    質問させていただきます。 if文の中のif文の記述の仕方について質問があります。 例えば if ( x > 0 ){ a = b+c; if ( a > 1) d = e+f; ・・・1 if ( a < 1) d = e-f; ・・・2 if ( a = 1 ) d = 1-g; ・・・3 } h = d + i; aが1より大きい場合は、1の処理を、aが1より小さい場合は2の処理を、aが1と同じであった場合、3の処理をして最終的に、h = d + i;の式の d に代入して h を求めたいと思っているのですが、うまくゆきません。 if文の中のif文の記述はどのようにすればよいのでしょうか? よろしければご教示よろしくお願いします。

  • if文について

    ソートのプログラムにおいて昇順・降順を選択して表示させるプログラムを書いてるのですが 下記のように記述するとエラーが出てしまいます。 よく調べたのですがエラー表示もよくわからないものなのでした。 どのようにすればうまく動くようになるのでしょうか? #include <stdio.h> #define swap(type, x, y) do {type t = x; x = y; y = t; } while (0) void bubble(int a[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (a[j - 1] > a[j]) swap(int, a[j - 1], a[j]); } } void bubble2(int a[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) if (a[j - 1] < a[j]) swap(int, a[j - 1], a[j]); } } int main(void) { int i; int x[7]; int nx = sizeof(x) / sizeof(x[0]); int select; printf("%d個の整数を入力せよ。\n", nx); for (i = 0; i < nx; i++) { printf("x[%d] : ", i); scanf("%d", &x[i]); } printf("昇順ですか降順ですか? 0:昇順/1:降順 >"); scanf("%d",&select); if (select == 0) bubble(x, nx); puts("昇順にソートしました。"); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); else bubble2(x, nx); puts("降順にソートしました。"); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); return (0); }

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

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

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