9. 因数分解(1)
何がやりたいかというと、例えばテキストボックスに
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"とメッセージボックスが出ます。