[JavaScript] 中置記法の一元一次方程式を解く電卓
- 2008-03-12
- カテゴリ: Client Side
- タグ: JavaScript パーサ 電卓 中置記法 一次方程式電卓
前回の記事で書いた電卓を発展させて、簡単な一元一次方程式を解くことのできる電卓にしてみた。xを1つだけ含む一次方程式を解くことができる。
例
alert(calc('-x+1=2-3')); // 2 / 1 alert(calc('3*3/(2-x)=4+(2/3*4)+1.2')); // 101 / 118 alert(calc('(8-5)/3=1/(x+2)-1.3*0.4')); // -51 / 38
括弧と単項演算子を使うことができます。今のところ、xは数式中に1つだけしか含めることができません。
実動サンプルとソースコードは続きで。
スポンサーサイト
[JavaScript] 分数で計算する中置記法電卓
- 2008-03-09
- カテゴリ: Client Side
- タグ: JavaScript パーサ 電卓 中置記法 一次方程式電卓
前回の記事と前々回の記事で書いていた数式パーサと分数クラスを改良して、中置記法の数式を分数のまま計算する電卓を書いた。
最終的な目標は、移項のアルゴリズムを実装して、一元一次方程式を解く電卓を作ることだけど、とりあえずは一段落。
設計
数式パーサを書いた前々回の記事では、数式を解釈して配列を使った構文木を返していたが、今回は配列ではなく、operator
とoperand1
とoperand2
の3つのフィールドを持つBinaryOperation
オブジェクトを使った二分木として返すようにした。
BinaryOperation
オブジェクトのoperate()
メソッドを呼ぶと、子要素のoperate()
メソッドを呼びつつ、適切な演算を行って値を返す仕組み。最末端ノードは、operate()
メソッドを実装したFraction
クラスを使った。
サンプルコード
var operation = parse('1 + 2 * (3 - 4) / 5'); var answer = operation.operate(); alert(answer); // 3 / 5 alert(answer.valueOf()); // 0.6