今年、大学の授業で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 です。
どうぞよろしくお願いします。
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
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 を同じ行に書くか別の行に書くかで異なります.
No.4
- 回答日時:
まあ、好みもありますが
プロとして突っ込まして貰います
dは大文字、小文字、全角などが考えられます、まあ、全角は避けても、少なくとも、dを判定するifは
if((d.eq.'c') .or. (d.eq.'C'))
とすべきですね、ここで余計なカッコをつけているのは、論理演算の順序を明示するためで、これは癖として付けた方が良いです。
また、else とif は改行しない方がよいでしょう。
また、implicit noneは使わない方が良いですね。暗黙の型宣言には従ってください(i-nは整数以外では使わないこと)、これだけで可読性が向上します。
キャラクタはcかs(string)で始まる変数とするのも有効です。
あと、endifが一つ多い、セマンティクスとしては問題ないけど、多分、シンタックスで通らないはず。
ひょっとして、コンパイル、リンクの方法がわからないのでしょうか。
詳しいご説明をありがとうございました。
コンパイルの方法などは大学でおしえられて知っているのですが、エラーメッセージを見てもどう間違っているのかがわからなくて困ってました。
まだまだ授業があるのでまた質問するかもしれませんが、出来ればお力を貸していただければと思います。
返事が遅くなって申し訳ないです。
学校のパソコンから書き込みしていたのですが、その後書き込もうとするといっつもエラーで書き込めなかったんです。
今友達の家のパソコンを借りてやっと書き込めたところです。
本当にありがとうございました。
No.3
- 回答日時:
実際に動かしてみて、正しく動作するかテストしてみては。
何となくですが、絶対温度からの変換しか動かない気が。
コンパイルの仕方とかは学校の人に訊いた方が手っ取り早いかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) VBA 同日で2回目(午後)の体温を登録するときのコード 3 2022/08/28 20:29
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
visual basic初心者です。 visu...
-
C#のループでtextboxに値を入れ...
-
二点の座標から距離や角度を求...
-
Excel VBAでsub,dimは何の略?
-
VBA public変数はどのようなこ...
-
アクセスできない保護レベルエ...
-
【VB.NET】テキストボックスに...
-
visual studio 2008 C# で、値...
-
C言語のサフィックスについて
-
リストビューの列ヘッダーの幅...
-
Excel vba で複数のテキストの...
-
パーソナルXLSBのfuctionを呼び...
-
プログラムの素朴な質問です 分...
-
sublimit textっていうエディタ...
-
ボールが壁に当たって跳ね返る...
-
VBAでcallで呼び出したsubを終...
-
Matlabでsin波を使って矩形波を...
-
分割コンパイルの方法がわかり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
vbsのmsgboxランダム表示について
-
日付の重複
-
verilogのcase文
-
片方のみ成り立つif分岐
-
TreeViewのTag情報取得
-
【FPGA】VHDLのprocessとevent
-
Verilogの文法
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
[至急]Project Euler:#21Amicab...
-
直線検出のハフ変換プログラム(...
-
pascalでの二分探索(バイナリ...
-
パスカル言語
-
Pascal言語
-
EXCEL VBA 文字 アドレス 検...
-
エクセルVBAついて ①if•••••the...
-
delphi
-
sublimit textっていうエディタ...
おすすめ情報