プログラミング雑感  新JavaScript入門  JavaScript,Neo-Generation  掲示板  表紙
8. 指数型無限級数クラス  10. 因数分解(2) 
プログラミング雑感
Written 5/22/02
9. 因数分解(1)
今回からしばらく因数分解について考えてみましょう。
スピードは遅くてもいいのでJavaScriptで組んでいきます。 でもホントはC++の方が組みやすいんです。
めざす姿
何がやりたいかというと、例えばテキストボックスに
  x^2+x-2
 
と入力すると、
  (x-1)(x+2)
 
と返ってくるようにしたいんです。
係数は整数とします。 整係数だと有理係数で因数分解できれば整係数にすることができます。 Appendix A
実はまだアルゴリズムを考えているところだったりします。
多項式型
最初に、多項式型というオブジェクトを考えましょう。
データを次のように格納します。
  a0 + a1x + ... + anxn => [ a0, a1, ... , an ]
 
それから、"x^2+x-2"といった文字列からデータを作る evaluate メソッドがほしいでしょう。
逆に、表示する print メソッド。
因数分解表示する print_fac メソッド。
因数分解した多項式オブジェクトを格納しておく配列 aryfactors プロパティ。
あと、因数分解する factorize メソッドです。
結局、次のようになりました。
  function polynomial() {
    this.coeff = [ ];
    this.aryfactors = [ ];
    this.evaluate = poly_eval;
    this.toString = poly_print;
    this.print_fac = print_fac;
    this.factorize = poly_fact;
  }
 
あとは実装するだけです。
字句解析
文字列を1字ずつ読み取って多項式に読み替えるメソッド evaluate を実装しましょう。
仕様は、
  変数は常にx
  構文エラーが起きたらcoeffを長さ0のArrayオブジェクトにする。
  小数の係数は即エラー
  指数形式も認めない
  スペース・タブは入ってもよい
  同次項があってもよい
 
あんまり解説することもないのでとっとと組んでいきます。
  
上のテキストボックスに多項式を、上の注意にしたがって、 入力してボタンを押してください。 多項式を格納する配列が表示されます。 例えば、"x^2-x^3"と入力すると、"0,0,1,-1"とメッセージボックスが出ます。
表示
次は表示する方を考えます。こちらの方がずっと簡単です。
  
上のテキストボックスに多項式を先ほどと同じように入力して、 ボタンを押してください。 多項式が次数降順で表示されます。 例えば、"x^2-x^3"と入力すると、"-x^3+x^2"とメッセージボックスが出ます。
次回から、いよいよ因数分解のプログラムを考えていきます。
first, prev, next, exit