2012-03-17 2 views
3

いくつかの研究をした後、私は後置記法と式を解析する方法について学びました。sin、cos、およびその他の関数を使って式を評価するにはどうすればよいですか?

私のコードは、後置記号に変換され、スタックベースの方法を使って評価されます。たとえば:5 + sin (2 + log (2))

Initial expression: 5 + 2^(4 - 1) 
Postfix notation: 5 2 4 1 -^+ 
Result: 13 

は、今私は機能を持つ式を評価できるようにするには、このプログラムを拡大しようとしています、罪のように、COS、例えば、ログインします。 私の最初のアイデアは、解析する前に、これらの関数を見つけてその結果を評価し、文字列に置き換えることでした。しかし、私はそれが非常に良いアイデアだとは思わない...

私は効率的な方法でこれを行うことができますか?

C#で書かれたコードです。http://pastebin.com/7wB81fyQですが、私は筆者が理解しやすいように擬似コードを好むでしょう...私はそれらの人ではありませんコピー&ペーストするだけです。

+1

機能(たとえば、「sin」、「cos」など)は、**プレフィックス**表記です。別の解析ルールを適用するだけです。 –

+2

これはShunting-Yardアルゴリズムで説明されています。http://en.wikipedia.org/wiki/Shunting-yard_algorithm – RBarryYoung

+0

@RBarryYoungありがとう、私はこのアルゴリズムを試してみます。 – Tibi

答えて

1

これらの機能は、他の演算子とブレースのように扱います。まず、カッコ内の内容を計算してから関数を実行します。 2つの数値を消費し+以外

Initial: 3 * Sin(4 + 5) 
Postfix: 4 5 + Sin 3 *  (that's how I would enter it in a HP calculator) 
or:  3 4 5 + Sin * 

Sinは一つだけの数を消費します。

+0

私は文字列で動作しません。 'System.Collections.Generics'には素敵な' Stack 'クラスがあります。 –

+0

正確には、Shunt-Yardアルゴリズムを使って正しい後置を生成する必要がありました。 – Tibi

関連する問題