• 締切済み

FORTRAN77

助けてください~ --------------------------------------- 華氏゜Fが与えられた時、摂氏℃と絶対温度Zを求めよ C=(5/9)(F-32),Z=C+273.16 ここで華氏゜Fは書式カードF1.5でカードに用意されていて、数値999.9のデータを読み込んだら終わりとする。 ただし、華氏゜Fの値は、-50.0゜Fから200.0゜Fまで10.0゜Fごとに変化させる。 --------------------------------------- で、私が頑張って(っていっても教科書を見ながら)書いたのが以下です。 --------------------------------------- * write(6,200) 200 format(1h ,8x,1hf,10x,1hc, 9x,1hz) 10 read(5,100)f 100 format(f5.1) if(f.eq.999.9)stop c=(f-32.0)*5.0/9.0 z=c+273.16 write(6,201)f,c,z 201 format(1h ,3(5x,f5.1)) go to 10 end ------------------------------------- 100 formatの下からdo文を使うのが狙いかと思いますがよくわかりません。 ちなみに参考教科書は入力データが ------------------------------------- 32.5 135.5 68.3 999.9 ------------------------------------- となっていました。多分これは使わないです。 よろしくお願いします(><)

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

DO 文は普通は回数の決まっているループを回る時に使います。途中で別の条件でループを終了することはありますが、それでも今何回目かを意識する処理で使うのが普通だと思います。 ただ、多くのコンパイラではDO WHILE が使えるので、もしそういうコンパイラを使っているなら READ(5,100) F 100 FORMAT(...) DO WHILE(F.NE.999.9) C=... Z=... WRITE(6,200) F,C,Z 200 FORMAT(...) READ(5,100) F END DO END WHILEがないコンパイラなら今のでいいと思います。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

上記のプログラムから、「100 FORMAT」以降を「DO」文にすると、データが1件読み込まれた後は永久ループに入ります。 どこからどこまでを繰り返したいのかをよく考えて、「GO TO」文を使わないでプログラムを作成してみたら判ると思います。

関連するQ&A

  • FORTRAN手助けを・・

    摂氏から華氏、華氏から摂氏が出るプログラムを作ろうと思っています。 具体的に言えば100.0C(摂氏)を入力すると...F(華氏)の形で表示したいのです。最後にF,Cをつけ、それによって摂氏、華氏と認識するにはどのようにしたら良いのでしょうか? 答えでなくてもかまいません。何かヒントになるようなことでもいいので教えて下さい。

  • FORTRAN77でプログラミング

    今年、大学の授業でFORTRAN77を使ったプログラミングを勉強することになりました。 今で3回授業が終わったところなのですが、いきなりつまずいてしまい皆さんの知恵をお借りしたいと思います。。 作るプログラムは 問:摂氏(C)、華氏(F)、絶対温度(K)のいずれかの値を { xx(温度の数値),yy(CかFかK) }のように入力したときに、入力した値以外の単位での温度値が表示されるプログラムを作れ。 自分なりに作ってみたのが下のプログラムです。 全く論外なプログラミングをしているかもしれませんが…。 (自作) c234567 implicit none real n,cx,fx,kx character*1 d,c,f,k c n:入力値 d:入力された温度の値 C:摂氏 F:華氏 K:絶対温度 write(*,*) '温度値、単位を表す文字を入力してください。' read(*,*)n,d if(d.eq.c)then cx=n fx=cx*(9/5)+32 kx=cx+273.15 else if(d.eq.f)then fx=n cx=(fx-32)*(5/9) kx=cx+273.15 else kx=n cx=kx-273.15 fx=cx*(9/5)+32 end if end if write(*,50) cx,'C',fx,'F',kx,'K' 50 format(' ',f7.3,a3,f7.3,a3,f7.3,a3) stop end これをどうしたらいいのでしょうか。 ちなみに、使用しているFORTRAN77は Compaq Visual Fortran Optimizing Compiler Version 6.1 です。 どうぞよろしくお願いします。

  • FORTRANの課題

    大学の授業の課題で 問 摂氏(C)、華氏(F)、絶対温度(K)の間で温度換算するプログラムを作れ。ただし、入力は「温度値、単位を表す文字」とし、それを換算した2つの温度を出力するようにつくること。例えば「25.0、'F'」と入力したら華氏温度25Fを摂氏温度と絶対温度に換算したものを表示する。 *温度単位の変換式は、摂氏温度をCとしたとき、F=9C/5+32 K=C+273.1 という課題が出されたのですがよく分からないので、アドバイス、回答の方お願いします。

  • プログラム改良 求む

    こんにちは 以下の摂氏を華氏に変換するプログラミングを、摂氏が入力された場合はそのまま出力し、華氏が入力された場合は摂氏に変換してから出力するようなプログラミングに改良したいです。 #include <stdio.h> int main() { printf("摂氏を華氏に変換します。変換したい温度を摂氏で入力してください。\n"); double c, f; scanf("%lf",&c); f = (c * 9 / 5) + 32; printf("%lfºFです。", f);    return 0; }  今のところ、プログラムにどのように摂氏を華氏の違いを認識させればいいかがわかりません。分かりやすくコードを添えていただけるとさらに助かります。お願いします。

  • fortran 外部サブルーチンの読み込みについて

    c c main.f c dimension x(2) x(1)=1 x(2)=2 y=5 call sub(x,y,z) write(*,*)'x1=',x(1) write(*,*)'x2=',x(2) write(*,*)'y=',y write(*,*)'z=x1+x2+y=',z stop end c---------------------------------- c sub.f c subroutine sub(a,b,c) dimension a(2) c=a(1)+a(2)+b write(*,*)'b=',b return end  以上のようなプログラムをmain.fとsub.fに分離して、別々にコンパイル。最後にそれぞれの実行ファイルをつなげるといったことがしたいのですが、どのようにすればいいのでしょうか。 サブルーチンをメインプログラムが参照するといったことがしたいです。

  • 摂氏の値を計算するプログラム・・?

    摂氏Cと華氏Fの間には C=5/9(F-32)という関係式があり、華氏の上限、下限、きざみを入力して摂氏の値を求めるプログラムを関数を使って作りたいのですが、自分で作ってみたところ関数の部分がよくわかりません。printf("摂氏 華氏\n");までは画面上に出力されます。そのあとの結果が出ないのです。以下に自分で書いたものを書きますので、どこをどう直したらいいか教えてください!お願いします!! #include<stdio.h> double functionC(double F,double F1,double F2,double l) { double temp; for(F=F1; F<=F2; F++){ F = F+l; temp = 5/9*(F-32); } return(temp); } main(void) { double C,F3,F4,i,j; printf("摂氏の値を計算します\n 華氏の下限、上限、きざみを入力してください\n"); printf("華氏の下限:\n"); scanf("%f", &F3); printf("華氏の上限:\n"); scanf("%f", &F4); printf("きざみ:\n"); scanf("%f", &i); printf("摂氏 華氏\n"); for(j=F3; j<=F4; j++) printf("%f %f\n", functionC(j,F3,F4)); }

  • fortranで・・・

    実行の画面に数字を入力すると、 英語の文章と 0.0 0.0 0.0 -NaN -NaN -NaN という文字が出てくるだけなんですが、これはプログラムが組めていないということなのでしょうか? ちなみに、打ったプログラムは、 C 判別関数 WRITE(*,100) 100 FORMAT(1H1/22X,'判別関数モデル'//19X,'消費量',3X,'消費比率'//19X, +'清酒',5X,'焼酎',5X,'ビール',7X,'清酒',6X,'ビール',7X,'M'10X,'D'/ +/) DO 10 I=1,47 CALL SUB1 10 CONTINUE STOP END SUBROUTINE SUB1 DIMENSION B1(3),B2(3),C(3),L(3),P(3) CHARACTER*12 A READ(5,50) A 50 FORMAT(3F8.1,3F7.1) X=1.0 DO 11 K=1,300 Y1=(-1.0) Y2=0.0 DO 12 J=1,3 B2=0.0 B1=0.0 L(J)=(-NINT(B1(J)*10.0/B2(J))) S1=Y1+X**L(J) S2=Y2+L(J)*X**(L(J)-1) Y1=S1 Y2=S2 12 CONTINUE W=X-Y1/Y2 IF(ABS(W-X).LT.1E-10) GO TO 13 X=W 11 CONTINUE 13 WO=W DO 14 J=1,3 C(J)=WO**L(J) 14 CONTINUE R1=0.0 DO 15 J=1,3 R2=R1+B2(J) R1=R2 15 CONTINUE D=0.0 DO 16 J=1,3 P(J)=B2(J)/R1 DO=D+P(J)*ALOG(P(J)/C(J)) D=DO 16 CONTINUE E=0.0 DO 17 J=1,3 EO=E+(B1(J)/B2(J)*P(J)) E=EO 17 CONTINUE WRITE(*,200) A,B2,P,E,D 200 FORMAT(1H,2X,A12,3X,3(F7.1,2X),4X,3(F9.6,X),4X,F9.6,2X,F9.6) RETURN END です。

  • FORTRANのOPEN分について

     私は、プログラミングに関して全くの初心者です。 これを考慮にいれてお答え下さい。お願いします。  FORTRANの入門の本を買って勉強しているのですが、OPEN文の ところがいまいちよく分りません。 integer l,u,h parameter (l=0,u=50,h=2) real x,y open(10,file='SUHYO.TXT'.status='new') write(10,200) 200 format(' '<3x,'X',8x,'Y') do 10 i=l,u,h x=real(i)/10.0 y=10x-9 write(10,210) x,y 210 format(' ',f5.1,f10.2) 10 continue close(10) end というプログラムがあり、私のパソコンで実際にやってみたいのですが どうもうまくいきません。  おそらくOPEN文のFILEが原因だとおもうのですが どのようにFILEを用意すればいいんでしょうか?  ちなみにコンパイルはできています。 関係ないかもしれませんが、OSはWinXPでソフトはF90です。

  • Fortranについて教えてください!

    こんにちわ。 ヤマといいます。 以下について教えて頂けないでしょうか? ------------------- 途中省略 ------------------- DO 31 I = 1,NCARDS LC = LC + 1 READ(8,FMAT) (XR(J), J=1,NPL) IF(I.NE.NCARDS) GO TO 6 IF(JL.EQ.0) GO TO 6 JL=NPL+1-JL DO 5 J=JL,NPL 5 XR(J)=0. C--------------------------------------------------------------- C ONLY PRINT OUT A FEW OF THE FIRST AND THE LAST LINES of Input Motion C--------------------------------------------------------------- 6 ICHECK = NCARDS - I IF (I .LE. 5 .OR. ICHECK .LT. 5) WRITE(6,2008) I,(XR(J), J=1,NPL) IF (I .EQ. 10) WRITE (6,2009) 2009 FORMAT(3X,'........ INPUT MOTION READ NOT ECHOED...........') C ENDIF C C FIND MAX. INPUT ACC. (XMAX) C 311 DO 31 J = 1,NPL,2 N = N + 1 X(N) = CMPLX(XR(J),XR(J+1)) 31 CONTINUE ........................................... とあります。 いま、XRは、 ----------------データ------------------------ -0.001694 -0.001668 -0.000086 -0.001356 -0.000678 0.000700 -0.001209 -0.000604 ・・・・・・・・・・・・・・・・・・・・・ ----------------データ------------------------ と1行に8列分のデータが存在します。 ソース中に「CMPLX(XR(J),XR(J+1))」とあります。 この意味がよく分かりません。通常だと実部にXR(J),虚部 にXR(J+1)を入れるというように解釈できるのですが、 本当でしょうか?ご存知の方ご意見よろしくお願いいたします。

  • FORTRANの出力データの左寄せができません。

    素数を一万個見つけてそれを規定のフォーマットでTXTファイル出力しなければいけないのですがRANGEの右側の列をハイフンのすぐ隣に左寄せしてファイルに出力したいのですがどうしてもよくわかりません。FやE使って試しましたがエラーが出てコンパイルできなかったです。左寄せ以外にももっと効率のいいコーディングありましたらアドバイスいただけませんか? FORMAT110の真ん中のI6なんですけどこの値が右寄せでTXTファイルに残ります。最初のI6が右寄せでハイフンはさんで二個目のI6が同じ右寄せだとみっともないのです。 110 FORMAT(I6, 1X, ('-'), 1X, I6, T17, 12(2X, I6)) S = 1  L = 12 WRITE (15,110) S, L, P(S:L) DO 60 S = S + 12,10000,12 L = L + 12 IF ( S .EQ. 9985 .AND. L .EQ. 9996) THEN A = S + 12 B = L + 4 WRITE (15,110) A, B, P(A:B) GO TO 99 ELSE WRITE (15,110) S, L, P(S:L) END IF 60 CONTINUE C END IF 99 CLOSE (15) END

専門家に質問してみよう