エラーも何もないプログラムなのに、計算されません。
答えは、401.0になるはずなのに・・
理由がわかりません。
コード載せておくので、どなたかお願いします。
implicit real*8 (a-h,o-z)
Parr_M=1.0d0
Temp=1.0d0
Mc=val_Mc (p,M_C_gamma,M_C_alpha)
x=Mc+1.0d0
write(6,10) x
10 format(1H ,F9.3)
end
ーーーーーーーーーーーーーー
real*8 function val_p (Parr_M)
implicit real*8 (a-h,o-z)
val_p=Parr_M(ix,iy)**3
return
end
ーーーーーーーーーーーーーー
real*8 function val_Mc (p,M_C_gamma,M_C_alpha)
implicit real*8 (a-h,o-z)
val_M_C_alpha=M_C_alpha(Temp)
val_M_C_gamma=M_C_gamma(Temp)
p=val_p (Parr_M)
*
val1=val_M_C_alpha
val2=val_M_C_gamma*p
val=val1*val2
*
val_Mc=val
return
end
ーーーーーーーーーーーーーーー
real*8 function M_C_alpha(Temp)
implicit real*8 (a-h,o-z)
M_C_alpha=Temp/2.0d0
return
end
ーーーーーーーーーーーーーーー
real*8 function M_C_gamma(Temp)
implicit real*8 (a-h,o-z)
M_C_gamma=Temp
return
end
ーーーーーーーーーーーーーーー
以上をはしらせると、
『forrtl: severe (157):Program Exception - access violation』
と出てきます。謎です。結果もちゃんと出る様に、F9.3で入力してるはずだが・・
No.4ベストアンサー
- 回答日時:
処理の意味は判らないのでとりあえず動くように余計な物を削除しました。
#渡すべき変数、不要な変数がメチャクチャです・・
また、答えは1.5にしかならないので、どこか式が違うと思われます
最初のプログラムに含まれていた
val_p=Parr_M(ix,iy)**3 は
val_p=Parr_M**3 に変わっていますが合っていますか?
#Parr_Mは関数ですか?変数ですか?
もう一度、FORTRANの文法を見直しましょう!
implicit real*8 (a-z)
Parr_M=1.0d0
Temp=1.0d0
Mc=val_Mc (Parr_M,Temp)
x=Mc+1.0d0
write(6,10) x
10 format(1H ,F9.3)
end
c----------------------------------------
real*8 function val_p (Parr_M)
implicit real*8 (a-z)
val_p=Parr_M**3
return
end
c----------------------------------------
real*8 function val_Mc (Parr_M,Temp)
implicit real*8 (a-z)
val_M_C_alpha=M_C_alpha(Temp)
val_M_C_gamma=M_C_gamma(Temp)
p=val_p (Parr_M)
val1=val_M_C_alpha
val2=val_M_C_gamma*p
val=val1*val2
val_Mc=val
return
end
c----------------------------------------
real*8 function M_C_alpha(Temp)
implicit real*8 (a-z)
M_C_alpha=Temp/2.0d0
return
end
c----------------------------------------
real*8 function M_C_gamma(Temp)
implicit real*8 (a-z)
M_C_gamma=Temp
return
end
この回答への補足
はい、1.5にしかなりません。書き間違えです。あと、Parr_M(ix,iy)は間違いです。正確にはx,y成分を含むParr_Mを計算していこうかと思っていますが、問題の筋に不必要なので、削除しています。Parr_M(ix,iy)は消し忘れです。
Parr_Mは変数です。
書いて頂いたもので走らせたのですが、*********でした。
計算エラーはでなかったのですが、その様に出力されました。
なので、確認のため、p,val_G_C_alpha,val_G_C_gammaを出力してみたのですが、pしか思い通り(1.0)にでませんでした。。。
(Mcのルーチンを消し、mainに直接val_G_C_alpha,val_G_C_gammaを返して試みたのですが・・・)
よろしくお願いします。
No.6
- 回答日時:
>書いて頂いたもので走らせたのですが、*********でした。
わずか数行の部分ですから、どこがNGかチェックできませんか?
function M_C_gamma なんか代入しているだけですから・・
#私はWATCOMのFORTRANで確認しました
原因判明しました!!
function の前に付けていたreal*8でした!!
これ抜いたら、動きました。ただ、そのロジックは謎・・
これをサンプルの1つとして、今後も勉強して行こうとおもいます。
皆さん、付き合っていただきありがとうございました。
ちなみにimplicit noneで全て定義して組みました。
面倒だけど、組み終わった後のデバッグ作業がかなり楽なことを実感しました♪
No.5
- 回答日時:
デバッグの初歩として各サブルーチンの入り口と出口で引数や計算結果を表示するようにしてみると思いますよ
これで 机上の計算とパソコンの実行結果との相違を潰してみましょう
1の1/2と ... M_C_alpha
1と ... M_C_gamma
1の3乗の積 ... val_p
の積 ... val_Mc
と1の和 って 401ですか?
(0.5 * 1 * (1*1*1) ) + 1
= ( 0.5 * 1 * (1) ) + 1
= ( 0.5 * 1 ) + 1
= ( 0.5 ) + 1
= 1.5
ですよね ・・・
この回答への補足
すいません、ミスです。
T=10,p=2で組み込んでいたもので・・
質問の際にわかりやすいようにと、1にして・・書き間違えです。
仰るとおり1.5です。
すいません。
各サブルーチンの入り口と出口で計算結果を表示させてみます。
No.3
- 回答日時:
自分はFortranは学生時代にちょっと齧ったくらいなので、もしかすると質問主殿よりも知らないかもしれない。
ただ、他の言語をやってきた経験から照らしておかしいかなという点を指摘してみたいと思う。
まず最初に、問題のプログラムはFortranのどの仕様(Fortran90とかFortran2008とか言うやつ)に準拠しているのかは知らないが、変数のスコープは問題無いのか?と思う。
具体的に言うと、メインロジックの中で定義している変数
>Parr_M=1.0d0
>Temp=1.0d0
>Mc=val_Mc (p,M_C_gamma,M_C_alpha)
上記は値をセットしている変数をFunctionのパラメーターに使っていないので、
p
M_C_gamma
M_C_alpha
には不定な値しか入っていないと思う。
(また変数スコープの関連でval_Mc Functionの中のTempはメインロジックで値を設定しているTempとは別物として扱われている筈)
Fortranは暗黙の型宣言を許しているので、宣言無しの変数が出てきてもコンパイル時にエラーにならないのがたちが悪い。
不定な値が入っている場合は、その変数にアクセスした瞬間に実行時エラーとなる。
質問主殿は、現段階では必ず implicit none で事前に変数定義を強制する制約の元でプログラムを書いた方がいいかなと思う。
No.1
- 回答日時:
implicit none
にして, 全ての変数を宣言してみたら?
この回答への補足
宣言したけど、状態はかわらず・・・
宣言の仕方あってると思いますが、一応確認して下さい。
気になる点あれば指摘してください。
implicit none
real*8 Parr_M,val_Mc,Temp,Mc,x
real*8 p,M_C_gamma,M_C_alpha
Parr_M=1.0d0
Temp=1.0d0
Mc=val_Mc (p,M_C_gamma,M_C_alpha)
x=Mc+1.0d0
write(6,10) x
10 format(1H ,F9.3)
end
ーーーーーーーーーーーーーー
real*8 function val_p (Parr_M)
implicit none
real*8 Parr_M
val_p=Parr_M**3
return
end
ーーーーーーーーーーーーーー
real*8 function val_Mc (p,M_C_gamma,M_C_alpha)
implicit none
real*8 val_M_C_alpha,val_M_C_gamma
real*8 M_C_alpha,M_C_gamma,Temp
real*8 val1,val2,val,val_p,p,Parr_M
val_M_C_alpha=M_C_alpha(Temp)
val_M_C_gamma=M_C_gamma(Temp)
p=val_p(Parr_M)
*
val1=val_M_C_alpha
val2=val_M_C_gamma*p
val=val1*val2
*
val_Mc=val
return
end
ーーーーーーーーーーーーーー
real*8 function M_C_gamma(Temp)
implicit none
real*8 Temp
M_C_gamma=Temp
return
end
ーーーーーーーーーーーーーー
real*8 function M_C_alpha(Temp)
implicit none
real*8 Temp
M_C_alpha=Temp/2.0d0
return
end
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 leetcode21 Merge Two Sorted Lists 2 2022/04/24 19:35
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Visual Basic(VBA) Worksheets メソッドは失敗しました。のエラー処理のやり方 4 2022/05/29 21:29
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- その他(プログラミング・Web制作) AndroidStudio 途中で終了する。 1 2023/04/26 11:21
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python... 環境設定 初心者です...
-
Adobe Premiere Proについて教...
-
vba クリップボードクリアにつ...
-
ITパスポートの勉強をしていま...
-
Pythonって何を意識した言語な...
-
Processingについて
-
昔のパソコン少年の武勇伝「店...
-
pythonにてseleniumを使うも、...
-
Google ColaboでGUI作成
-
htaccessで特定のディレクトリ...
-
このURLで広告を出しているのは...
-
バッチファイルが保存されてい...
-
VBA 電話番号の正規表現について
-
プログラミング
-
プログラミングの雑談とかでき...
-
プログラムの素朴な質問です 分...
-
【IT導入補助金は個人事業主や...
-
プログラムの起動、利用につい...
-
シェルのSTEP数について教えて...
-
Webサイト内に埋め込んだmp4動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
How to replace an old file wi...
-
十字ボタンのデータについて
-
VBAのCodeModule.Linesの記入方法
-
マイクラ1.7.10のエナジークリ...
-
JavaScript?jQuery?で書き方...
-
C言語 exitの使い方
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
excelの、ある数式内の{}の意...
-
エクセルへのデータの貼付時に...
-
配列の値を置換するにはどうす...
-
EXCEL/VBA 変数の値をクリップ...
-
だれがとけるの?
-
C言語 列挙型(enum型)変数について
-
VisualStudio2022でC言語プログ...
-
[VBS]変数を定数に変換する方法...
-
jsp~jspにhiddenを使って変数...
-
プログラミングについての質問...
おすすめ情報