c# - 如何计算带有 sin、cos 和其他函数的表达式?

标签 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 ,但我更喜欢一些伪代码,这样我可以更好地理解我在写什么……我不是那种只会复制和粘贴的人。

最佳答案

像对待任何其他运算符加大括号一样对待这些函数。先计算大括号中的内容,然后执行函数。

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/

相关文章:

c# 如何转换泛型类型

regex - 如何高效实现.*a.*b.*这样的正则表达式?

algorithm - 二维叉积定义

algorithm - 在Matlab中有条件地查找八个邻居的行号和列号

JavaScript 表达式名称

python - 如何解析 AND/OR 运算符以评估 python 中的条件字符串

rust - 当用于分隔匹配表达式的分支时,大括号和逗号之间有什么区别?

c# - 在抽象类中有一个构造函数好吗?

c# - 在 asp.net c# 中使用 SQL Server 存储过程输出

c# - 如何检查 Windows 注册表在 .NET Core 应用程序中是否可用?