我需要编写一个程序(C#),允许用户使用变量和数字创建通用公式。例如:
D = A + (A - C / X)(7.8 - 6.6)
F = E + (E - C / X)(7.8 - 6.6)
FinalResult = (A + D)(0.9) + (E + F)(0.32) + B(0.1) + .023
其中所有变量对我来说都意味着要转到数据库并根据值查找并在其位置返回一个数字。所以A例如是2.12(C和E也是一样)
构建此计划的最佳方式是什么?我如何让我的程序阅读这些公式?
我已经看过一些MathML,但不知道如何开始(或者它的一个例子)
- 更新 -
我提到MathML只是在SO上看到了涉及它的其他一些问题。你们都是对的,我不需要展示它,我只需要确定某人想要的东西并用它来计算一些东西。
我的变量将映射到数据库中的某些内容。例如,A会告诉我使用以下内容:
Vend_Key = 3
Trmnl_Key = 5
Prod_Key = 7
然后用于从数据库返回一个数字。
我需要一个数据库来保存人们创建的公式。我必须有一个可以运行并执行这些功能的计划任务,并将信息保存在其他地方。
答案 0 :(得分:2)
所以基本上你需要一个计算器?
如果是这样,那么我首先要做的就是搜索&用它们的值替换变量字母,然后你可以使用一些算法来评估表达式,例如首先将它转换为后缀表示法(在算法中更容易评估),使用类似这样的东西(google for infix to postfix algorithm for more and实施例):
如果扫描的字符是操作数,请将其添加到Postfix字符串。如果扫描的字符是操作符并且堆栈为空则将字符推送到堆栈。
重复此步骤,直到扫描完所有字符。
当你准备好后缀字符串时,你可以使用简单的后缀评估算法,它基本上是这样的:
如果扫描的字符是操作数,请将其添加到堆栈中。如果扫描的字符是操作符,则堆栈中将至少有两个操作数。
重复此步骤,直到扫描完所有字符。
topStack将是你表达的结果。
答案 1 :(得分:0)
我正在开发一个我自己的项目,它也是用户输入的公式。我一直在计划工作的方式是解析各种字母。然后做一个表达式树。
每个运算符都有2个值。创建一个包含2个值和运算符类型的类。 2个值可以是值或更多运算符。当您评估树时,它将调用顶级操作员,该操作员将调用其子项,并调用其子项等等,直到评估完成并返回结果。
用于读取:获取传递给程序的字符串并开始解析它。首先扫描乘法和除法。在这些情况下,您可以简单地转换为单个值,与括号相同。输入这些值后,立即搜索加法和减法。将这些输入到表达式树中,然后让孩子们拥有。完成后,你就可以在表达式树中得到整个方程式。