- ベストアンサー
Fortranプログラミングでうまくいきません
適量の弱酸とその塩を含んでいる緩衝液の正確な水素イオン濃度を求めるプログラミングを作ったのですがうまくいきません…泣 HC弱酸の濃度 BA塩の濃度 HA強酸の濃度です print*,'弱酸の濃度を入力してください’ read*,HC KW=10E-14 KA=1.85*10E-5 BA=0.6 HA=0.7 H1=10E-7 10 A1=H1-KW/H1+BA-HC H2=(HA+BA=A1)*KA/A1 S=1-H2/H1 if(ABS(S).LE.0.05)then print*,'水素イオン濃度は',H2 else H1=H2 go to 10 endif end コンパイルはできるのですが、数値を入力しても作動しません。どこが間違っているかご指導お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
print*,'弱酸の濃度を入力してください’の右側のシングルクォーテーションが全角だとか、H2=(HA+BA=A1)*KA/A1の真中の=は意味がよく分からないけどたぶんどちらも質問書くときにタイプミスしたんですよね。 ひょっとして変数の型宣言していますか?ちゃんと型宣言しないと、Kで始まる変数は整数型になりますね。となるといつまでも収束しなくて応答なしなんじゃないでしょうか。 計算式があっているかどうかまでは。。。分かりません
その他の回答 (4)
- manda
- ベストアンサー率23% (20/85)
私、Fortran は出来ませんが、一般論として。 「思ったように動かない」 という場合は 「当然こうなる筈」 と思って作った箇所が、じつはその通りでないという 事ではないでしょうか。 今の場合、「作動しません」ということは、なんにも プリントしてくれないという事ですね? ということは、if がぜんぜん成立しなくて、毎回 else の方へ行っている、という事を疑ってみるといいと思います。 え、当たり前すぎますか? でもどなたも指摘しないし、質問者のかたはそういうコツ に不慣れみたいだから、いいですよね。
お礼
そういうコツは知りませんでした。プログラミングを勉強するのは、初めてだったので非常に参考になりました。ご回答ありがとうございます。
- jeee
- ベストアンサー率52% (119/227)
Fortranコンパイライを確認してください。 > KW=10E-14 > KA=1.85*10E-5 > BA=0.6 > HA=0.7 > H1=10E-7 型宣言しない場合、 変数がI~Nで始まる場合のとき(単精度)整数型 変数が上記以外のとき(単精度)実数型 > H2=(HA+BA=A1)*KA/A1 今までの同じ、言語使用がおかしくないのかな。 コンパイルしてエラーがでないのなら、OK?
お礼
型宣言していませんでした。初歩的なミスです。すみません。
- imogasi
- ベストアンサー率27% (4737/17069)
Basicに移植できそうなので、やって見た。 済みませんFortranがないので。 Sub test01() HC = InputBox("弱酸の濃度を入力してください") KW = 0.0000000000001 KA = 1.85 * 0.0001 BA = 0.6 HA = 0.7 H1 = 0.000001 p10: A1 = H1 - KW / H1 + BA - HC H2 = (HA + BA) * KA / A1 S = 1 - H2 / H1 If (Abs(S) < 0.05) Then MsgBox "水素イオン濃度は" & H2 Else H1 = H2 GoTo p10 End If End End Sub HA+BA=A1の部分を上記のようにしたら、動きました。 ロジックミスでなく、他の原因でしょう。そちらを疑ってください。 イコールの左辺が2項、右辺が1項の言語なんて、見たことないです。少なくとも一番旧い歴史のFortranにはないでしょう。 =は+か-のミスタイプでしょうか。
お礼
参考にさせていただきます。=はタイプミスです。すみません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
(HA+BA=A1) の部分は期待したように動きますか? ほとんどの場合で=が成立しないように思うのですが。 勘違いしてたらすみません。
お礼
すいません。質問文のタイプミスです。正確にはHA+BA-A1です。
お礼
型宣言していませんでした(泣)初歩的なミスです。すみません。ご指摘ありがとうございます。