(在c90中)(Linux)
输入:
sqrt(2 - sin(3*A/B)^2.5) + 0.5*(C*~(D) + 3.11 +B) a b /*there are values for a,b,c,d */ c d
cos(2 - asin(3*A/B)^2.5) +cos(0.5*(C*~(D)) + 3.11 +B) a b /*there are values for a,b,c,d */ c d
sqrt(2 - sin(3*A/B)^2.5)/(0.5*(C*~(D)) + sin(3.11) +ln(B)) /*max lenght of formula is 250 characters*/ a b /*there are values for a,b,c,d */ c /*each variable with set of floating numbers*/ d
如您所见,输入中的中缀公式取决于用户。我的程序将使用一个公式和n元组值。然后,它为a,b,c和d的每个值计算结果。如果您想知道我在说什么;程序的结果是图形。/ 有时,我想我会接受输入并存储在字符串中。 然后另一个想法出现了“我应该在结构中存储公式”,但是我不知道如何在结构的基础上构造代码。/
真的,我不知道如何将公式存储在程序代码中,以便我能完成自己的工作。能给我看看么?
/* a,b,c,d is letters cos,sin,sqrt,ln is function*/
您需要编写一个词法分析器来对输入进行标记化(将其分解为各个组成部分- 运算符,标点符号,标识符等)。不可避免地,您将获得一些令牌序列。
之后,有多种方法可以评估输入。最简单的方法之一是使用shunting yard算法将表达式转换为后缀(后缀表达式的求值用大写E表示很容易)。