プロが教えるわが家の防犯対策術!

今年、大学の授業で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 です。
どうぞよろしくお願いします。

A 回答 (5件)

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
    • good
    • 0
この回答へのお礼

9.0や5.0にするのを忘れていました!
すっごい初心者です。。。(汗)

とても参考になりました。
ありがとうございました!

お礼日時:2006/05/17 19:45

久しぶりに 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 を同じ行に書くか別の行に書くかで異なります.
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/17 19:52

まあ、好みもありますが


プロとして突っ込まして貰います

dは大文字、小文字、全角などが考えられます、まあ、全角は避けても、少なくとも、dを判定するifは

if((d.eq.'c') .or. (d.eq.'C'))

とすべきですね、ここで余計なカッコをつけているのは、論理演算の順序を明示するためで、これは癖として付けた方が良いです。
また、else とif は改行しない方がよいでしょう。
また、implicit noneは使わない方が良いですね。暗黙の型宣言には従ってください(i-nは整数以外では使わないこと)、これだけで可読性が向上します。
キャラクタはcかs(string)で始まる変数とするのも有効です。

あと、endifが一つ多い、セマンティクスとしては問題ないけど、多分、シンタックスで通らないはず。

ひょっとして、コンパイル、リンクの方法がわからないのでしょうか。
    • good
    • 0
この回答へのお礼

詳しいご説明をありがとうございました。
コンパイルの方法などは大学でおしえられて知っているのですが、エラーメッセージを見てもどう間違っているのかがわからなくて困ってました。
まだまだ授業があるのでまた質問するかもしれませんが、出来ればお力を貸していただければと思います。


返事が遅くなって申し訳ないです。
学校のパソコンから書き込みしていたのですが、その後書き込もうとするといっつもエラーで書き込めなかったんです。
今友達の家のパソコンを借りてやっと書き込めたところです。
本当にありがとうございました。

お礼日時:2006/05/17 19:51

実際に動かしてみて、正しく動作するかテストしてみては。


何となくですが、絶対温度からの変換しか動かない気が。

コンパイルの仕方とかは学校の人に訊いた方が手っ取り早いかと。
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!