• ベストアンサー

BASICで3連1次方程式

まったくの初学者です。 BASICの基本の命令文(IF,FOR~NEXTなど)を理解できる程度です。 次のような課題が出まして、かなり苦しんでいます。 問題の丸投げをするつもりはありませんが、周りに詳し知人もおらず困ってます。 解法の道筋をご教授願えたらうれしいです。 次の3連1次方程式を解くプログラムを作成しなさい。 ただし、X、Y、Zは整数とし、その範囲を-100<X、Y、Z<100とする。 8X+7Y+3Z=-2 2X-5Y+9Z=-8 -4X+2Y-7Z=12 問題文の条件でX、Y、Zの範囲が指定されているので、ループ(FOR~NEXT~)とIFを使えば、いいのかなあと考えまして、試行錯誤したのですが、まったくだめでした。

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

  • ベストアンサー
  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.2

これだと行列で考えたほうが分かりやすいですね(^^; sinkichiさんが、もし高校2年生以上なら、これはかろうじて理解できると思います。 http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node28.html ただ、この場合 「問題文の条件でX、Y、Zの範囲が指定されている」ので、おそらくはFor文で判定しろ、というのが題意でしょう。 ベタで書いたらこんな感じですね。 for x= -100 to 100 for y= -100 to 100 for z= -100 to 100 if ((8*x+7*y+3z)=-2) and ((2*x-5*y+9*z)=-8) and ((-4*x+2*y-7*z)=12) then x1=x:y1=y:z1=z '答えを保存 x=100:y=100:z=100 'ループを即抜けするため next z:next y:next x print x1,y1,z1 '答えの表示

sinkichi
質問者

お礼

すばやいご解答ありがとうございました。 おかげさまで自分の作ったプログラムのミスに気づくことができました。 これで課題は完成できます。 ありがとうございました。

その他の回答 (2)

  • kbannai
  • ベストアンサー率32% (88/268)
回答No.3

「課題」ということなので、大学か専門学校のプログラミングの授業であるとか思います。 私も#1の方と同じく、3元連立1次方程式は三角行列を利用した「ガウスの消去法」で解くのが、良いと思います。 ※「ガウスの消去法」についてはココを参照してください。 http://cml.me.seikei.ac.jp/~sueda/kyouzai/kyozai_008.htm その他、検索エンジンでたくさん出てきます。 肝心のプログラム・ソースについては、FortranやC言語で 書かれたものがウェブにはたくさんあります。アルゴリズムは同じです。 Basicプログラム・ソースは、参考URLを見てください。 初学者さんということなので、if文、入れ子のfor~next文のほかに「配列」を使うところが難しいと思います。

参考URL:
http://www-ku.magma.ne.jp/~yamanari/index.html
sinkichi
質問者

お礼

ありがとうございます。 >if文、入れ子のfor~next文のほかに「配列」を使うところが難しいと思います。 まさにそのとおりで、試行錯誤して走らせても「エラー」続きでして・・・ 本当に助かりました。 また、ここに質問することで理解が深めることができたと思います。

回答No.1

とりあえず解法のヒントです。  この連立方程式を解くためには、行列を用いた『消去法』を用いてはいかがでしょうか?  この連立方程式を拡大係数行列で表現し、それをDIM命令語で2次元(行=3:列=4)の配列に格納します。  後は行列の行基本変形をプログラム上で再現してみてください。  こういった感じでいかがでしょうか?

sinkichi
質問者

お礼

すばやいご解答ありがとうございます。 プログラムの勉強は数学の勉強とほぼ等しいということを今回の課題で感じました。 連立方程式を解く解法がこんなにいろいろあるとは感心しました。

関連するQ&A