• ベストアンサー

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 コンパイルはできるのですが、数値を入力しても作動しません。どこが間違っているかご指導お願いします。    

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

  • ベストアンサー
回答No.2

print*,'弱酸の濃度を入力してください’の右側のシングルクォーテーションが全角だとか、H2=(HA+BA=A1)*KA/A1の真中の=は意味がよく分からないけどたぶんどちらも質問書くときにタイプミスしたんですよね。 ひょっとして変数の型宣言していますか?ちゃんと型宣言しないと、Kで始まる変数は整数型になりますね。となるといつまでも収束しなくて応答なしなんじゃないでしょうか。 計算式があっているかどうかまでは。。。分かりません

007_007
質問者

お礼

型宣言していませんでした(泣)初歩的なミスです。すみません。ご指摘ありがとうございます。

その他の回答 (4)

  • manda
  • ベストアンサー率23% (20/85)
回答No.5

私、Fortran は出来ませんが、一般論として。  「思ったように動かない」 という場合は  「当然こうなる筈」 と思って作った箇所が、じつはその通りでないという 事ではないでしょうか。 今の場合、「作動しません」ということは、なんにも プリントしてくれないという事ですね? ということは、if がぜんぜん成立しなくて、毎回 else の方へ行っている、という事を疑ってみるといいと思います。 え、当たり前すぎますか? でもどなたも指摘しないし、質問者のかたはそういうコツ に不慣れみたいだから、いいですよね。

007_007
質問者

お礼

そういうコツは知りませんでした。プログラミングを勉強するのは、初めてだったので非常に参考になりました。ご回答ありがとうございます。

  • jeee
  • ベストアンサー率52% (119/227)
回答No.4

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?

007_007
質問者

お礼

型宣言していませんでした。初歩的なミスです。すみません。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

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にはないでしょう。 =は+か-のミスタイプでしょうか。

007_007
質問者

お礼

参考にさせていただきます。=はタイプミスです。すみません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

(HA+BA=A1) の部分は期待したように動きますか? ほとんどの場合で=が成立しないように思うのですが。 勘違いしてたらすみません。

007_007
質問者

お礼

すいません。質問文のタイプミスです。正確にはHA+BA-A1です。

関連するQ&A