一次方程式の解法

プログラムの仕組み
 1140行までがメインルーチンで、あとはサブルーチンです。
 @ 主な変数
  A(10,6) 一次方程式の各項の係数または数など
   A(□,0)・・係数または数(分数の場合は分子)
   A(□,1)・・分数の場合の分母(分数ではない時は0)
   A(□,2)・・かっこにかけてある数(ないときは0)
   A(□,3)・・かっこを割っている数(ないときは0)
   A(□,4)・・その項がかっこの中ではないときは0、
           かっこの中の時は、かっこの何番目の項か
   A(□,5)・・その項が数(定数項)なら0、係数なら1
   A(□,6)・・その項が左辺なら0、右辺なら1
  C$      入力した一次方程式
  A$      式を解析するために、
           C$の最後の”+”をつけた一次方程式
  L       A$の文字数
  R       エラーの有無(あり=1)
  N       一次方程式の項の数+1
  P       /が式にあったら1(分数かどうかのフラグ)
  E       =が式にあったら1(有無と左辺右辺の判断)
  K       かっこが開いていたら1(式の解析サブ)
          かっこの有無(かっこを外すサブ)
          分母をはらうためにかける数(分母をはらうサブ)
          移項をする必要があるなら1(移項するサブ)
          左辺の項の数(両辺の計算サブ)
  H       (X+3)/2というように、
            式を割っていたら1(式の解析サブ)
          右辺の項の数(両辺の計算サブ)
  S$      式から数字を取り出すときに使う
  X       文字X、xの有無(式の解析サブ)
          現在のカーソルのX座標(分数サブ)
  U       左辺の項の数
  S       その項が、左辺及び右辺の先頭かどうか(先頭=0)
          符号(両辺をXの係数で割るサブ)
  B       かっこを外す=0、分母を外す=1
            (分母をはらうサブ)
          左辺の数の和(両辺の計算サブ)
  M       符号
  A0,A1   約分するサブで、使う分子と分母の数を入れる
  A       右辺の係数の和
  L1      分数の分子の桁数
  L2      分数の分母の桁数

 A サブルーチンの説明
  *KAISEKI−−−−次方程式の解析
           (項に分解し、その種類を判断する。)
  *KAKKO−−−−−かっこを外す(外した式を表示)
  *KAKERU−−−−かっこを外す(外した式の計算をする。)
   *KAKERU2−−−分母をはらうとき
  *BUNBOWOHARAU−−−−分母をはらう(最小公倍数を求めて上記サブへ)
  *IKOU−−−−−−文字の項を左辺に、数字の項を右辺に移項する
  *KEISAN−−−−両辺をそれぞれ計算する。
  *KOTAE−−−−−Xの係数で両辺を割り、答えを出す。
  *YAKUBUN−−−分数を既約分数にする。
  *BUNSU−−−−−分数の形で表示する。
   <<<<例>>>>
     1  2
   2(□x−□)=3      最初の式(このように表示されません)
     4  3            (入力されたまま表示されます)
     1      2
   2*□x+2*(−□)=3  *KAKKOのサブルーチンで表示
     4      3
   1  4
   □x−□=3         *KAKERUのサブルーチンで表示
   2  3
     1      4
   6*□x+6*(−□)=6*3 *BUNBOWOHARAU−>*KAKKO2で表示
     2      3
   3x−8=18              *KAKERU2で表示
   3x=18+8        *IKOUで表示
   3x=26          *KEISANで表示
     26
   x=□□           *KOTAEで表示
      3

 B 関数の説明
 FNR$−−−−数字を数字のまま表示すると、正数の場合は、数字の前に1文字空きます(符号が入るところ)。それを取り除く関数です。
    (例)  3 => ” 3” => ”3”
        −3 => ”−3” => ”−3”
        数字    文字に     結果

 C エラー処理
    次のエラーがあります。      エラーの例
  1.error 0では割れない   X/+3=3 X/0=3
  2.error 分母に文字はこない 3/X=3
  3.error 文字  がある   3Y=3 3*X=3,2
  4.error = がない     2X+6
  5.error X または x がない  2+3=5
  6.error 右辺がない     2X+3=
  7.error 左辺がない     =3X
  8.error ) が足りない   2(X+3=3
  9.error ( がない     X+6)=5
 10.error 桁数が多すぎます  54321X=0.123
 11.error 項の数が多すぎる  x=1+2+3+4+5+6+7+8+9=10

 D 改造のアドバイス
 グラフィックの命令を使っていないので、ほとんどのコンピュータで動くのではないかと思います(確かめていません)。
 このプログラムは、必ずかっこを外してから分母をはらいますが、その逆の方がいい場合もあります。例えば
  X−5      1  5       1      5
  −−−=3 => −X−−=3 =>2*−X+2*(−−)=2*3
   2       2  2       2      2
つまり (X−5)/2=3=>X/2−5/2=3=>・・・
  とかっこを外して、分母をはらうより、
  X−5        X−5
  −−−=3 => 2*−−−=2*3 =>X−5=6
   2          2
と先に分母をはらった方がいい場合があります。それをプログラムしてみるのもいいと思います。
 また、このプログラムは小数のまま計算し、最後の答えでのみ処理をしていますが、分数と同じように先に小数を整数に直して計算することもいいです。*IKOUの前にそういうサブルーチンを入れてみるのもいいと思います。
 分数の表示の仕方を、もっとうまい方法があったら、直してみて下さい。そして、教えていただけるとうれしいです。
 変数表と各サブルーチンの説明をみて、いろいろ改造をしてみて下さい。


[ 戻る ]