タグ: 一次方程式電卓

[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] 分数で計算する中置記法電卓

前回の記事前々回の記事で書いていた数式パーサと分数クラスを改良して、中置記法の数式を分数のまま計算する電卓を書いた。

最終的な目標は、移項のアルゴリズムを実装して、一元一次方程式を解く電卓を作ることだけど、とりあえずは一段落。

設計

数式パーサを書いた前々回の記事では、数式を解釈して配列を使った構文木を返していたが、今回は配列ではなく、operatoroperand1operand2の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

続きを読む

[JavaScript] 実数を分数のまま計算するクラス

前回の記事と同じ目的で、値を分数のまま計算するクラスを作った。

細かいエラー処理などはしていないのでどうなるかはわからないが、何らかの計算を伴う処理の後には必ず約分関数を呼ぶようにし、約分関数でエラーをチェックするような設計にした。

動作サンプル

var f = new Fraction(6, 4);
console.log(f);    // 3 / 2 num=3 den=2

f.add(new Fraction(2, 3.2));
console.log(f);    // 17 / 8 num=17 den=8

f['*'](new Fraction(5, 2));
console.log(f);    // 85 / 16 num=85 den=16

続きを読む

[JavaScript]数式から構文木を生成する数式パーサ

一元一次方程式を解釈して、未知数の値を求めるプログラムが書きたくなったので、まずは数式パーサを書いてみることにした。

id:amachangのコードを参考に、JavaScriptを使って数式を構文木に変換する数式パーサを書いてみた。

仕様などはほとんどamachangのものと同じだけど、↓の点が異なる。

  • 括弧が使える
  • 単項演算子の+-と数値との間に空白を置いてはいけない
  • 逆に、二項演算子の+-と数値との間には空白を置かなければいけない

続きを読む