プロが教えるわが家の防犯対策術!

まったくの初学者です。
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を使えば、いいのかなあと考えまして、試行錯誤したのですが、まったくだめでした。

A 回答 (3件)

これだと行列で考えたほうが分かりやすいですね(^^;



sinkichiさんが、もし高校2年生以上なら、これはかろうじて理解できると思います。
http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/nu …

ただ、この場合
「問題文の条件で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 '答えの表示
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/18 06:16

「課題」ということなので、大学か専門学校のプログラミングの授業であるとか思います。



私も#1の方と同じく、3元連立1次方程式は三角行列を利用した「ガウスの消去法」で解くのが、良いと思います。

※「ガウスの消去法」についてはココを参照してください。
http://cml.me.seikei.ac.jp/~sueda/kyouzai/kyozai …

その他、検索エンジンでたくさん出てきます。

肝心のプログラム・ソースについては、FortranやC言語で
書かれたものがウェブにはたくさんあります。アルゴリズムは同じです。
Basicプログラム・ソースは、参考URLを見てください。

初学者さんということなので、if文、入れ子のfor~next文のほかに「配列」を使うところが難しいと思います。

参考URL:http://www-ku.magma.ne.jp/~yamanari/index.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/18 06:25

とりあえず解法のヒントです。



 この連立方程式を解くためには、行列を用いた『消去法』を用いてはいかがでしょうか?

 この連立方程式を拡大係数行列で表現し、それをDIM命令語で2次元(行=3:列=4)の配列に格納します。
 後は行列の行基本変形をプログラム上で再現してみてください。

 こういった感じでいかがでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/18 06:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!