经过一些研究,我了解了后缀表示法,以及如何解析表达式。
我的代码转换为后缀表示法,然后使用基于堆栈的方法对其求值。例如:
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 ,但我更喜欢一些伪代码,这样我可以更好地理解我在写什么……我不是那种只会复制和粘贴的人。
最佳答案
像对待任何其他运算符加大括号一样对待这些函数。先计算大括号中的内容,然后执行函数。
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
只消耗一个数字。
关于c# - 如何计算带有 sin、cos 和其他函数的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752364/