• ベストアンサー

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 です。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

c,f,kの初期化を忘れていますね。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- implicit none real n,cx,fx,kx character*1 d,c,f,k c='c' f='f' k='k' write(*,*) '温度値、単位を表す文字を入力してください。' read(*,*)n,d if(d.eq.c)then cx=n fx=cx*(9.0/5.0)+32 kx=cx+273.15 else if(d.eq.f)then fx=n cx=(fx-32)*(5.0/9.0) kx=cx+273.15 else kx=n cx=kx-273.15 fx=cx*(9/5)+32 end if end if write(*, 50) cx,fx,kx 50 format(f9.3,'C',f9.3,'F',f9.3,'K') stop end

yuuki0117
質問者

お礼

9.0や5.0にするのを忘れていました! すっごい初心者です。。。(汗) とても参考になりました。 ありがとうございました!

その他の回答 (4)

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

久しぶりに Fortran を使ってみました. #3 は大正解です. 5/9 とか 9/5 じゃダメ. 5/9 は 0 だし, 9/5 は 1 でしょ? #4 の else と if については, この場合普通には if (d .eq. 'C') then ~ else if (d .eq. 'F') then ~ else ~ end if とすると思いますが, if (d .eq. 'C') then ~ else if (d .eq. 'F') then ~ else ~ end if end if でも間違いではないです. else と if を同じ行に書くか別の行に書くかで異なります.

yuuki0117
質問者

お礼

なんとか完成させることができました。 ありがとうございました。

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.4

まあ、好みもありますが プロとして突っ込まして貰います dは大文字、小文字、全角などが考えられます、まあ、全角は避けても、少なくとも、dを判定するifは if((d.eq.'c') .or. (d.eq.'C')) とすべきですね、ここで余計なカッコをつけているのは、論理演算の順序を明示するためで、これは癖として付けた方が良いです。 また、else とif は改行しない方がよいでしょう。 また、implicit noneは使わない方が良いですね。暗黙の型宣言には従ってください(i-nは整数以外では使わないこと)、これだけで可読性が向上します。 キャラクタはcかs(string)で始まる変数とするのも有効です。 あと、endifが一つ多い、セマンティクスとしては問題ないけど、多分、シンタックスで通らないはず。 ひょっとして、コンパイル、リンクの方法がわからないのでしょうか。

yuuki0117
質問者

お礼

詳しいご説明をありがとうございました。 コンパイルの方法などは大学でおしえられて知っているのですが、エラーメッセージを見てもどう間違っているのかがわからなくて困ってました。 まだまだ授業があるのでまた質問するかもしれませんが、出来ればお力を貸していただければと思います。 返事が遅くなって申し訳ないです。 学校のパソコンから書き込みしていたのですが、その後書き込もうとするといっつもエラーで書き込めなかったんです。 今友達の家のパソコンを借りてやっと書き込めたところです。 本当にありがとうございました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

実際に動かしてみて、正しく動作するかテストしてみては。 何となくですが、絶対温度からの変換しか動かない気が。 コンパイルの仕方とかは学校の人に訊いた方が手っ取り早いかと。

noname#69788
noname#69788
回答No.1

私も大学でFORTRANを使っていましたがほとんどわすれてしまいましたが、最後の行がCONTINUEでないのはなぜですか。

関連するQ&A

専門家に質問してみよう