如何用sin,cos和其他函数来评估表达式?

时间:2012-03-17 17:53:46

标签: c# algorithm expression evaluation

在做了一些研究后,我了解了后缀表示法,以及如何解析表达式。

我的代码转换为后缀表示法,然后使用基于堆栈的方法对其进行评估。例如:

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

现在我正在尝试扩展这个程序,以便能够使用函数来计算表达式,例如sin,cos,log,例如:5 + sin (2 + log (2))。 在解析它之前,我最初的想法是找到这些函数,评估它们的结果,并在字符串中替换它。但我认为这不是一个好主意......

那么我怎么能以有效的方式做到这一点呢?

以下是用c#编写的一些代码,如果有任何用处:http://pastebin.com/7wB81fyQ,但我更喜欢一些伪代码,这样我才能理解我写得更好......我不是那些只是复制和粘贴的人。

1 个答案:

答案 0 :(得分:1)

像处理任何其他操作符和大括号一样处理这些函数。首先计算大括号中的内容,然后执行函数。

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只消耗一个数字。