小编典典

数学表达式解析

algorithm

(在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*/

阅读 247

收藏
2020-07-28

共1个答案

小编典典

您需要编写一个词法分析器来对输入进行标记化(将其分解为各个组成部分-
运算符,标点符号,标识符等)。不可避免地,您将获得一些令牌序列。

之后,有多种方法可以评估输入。最简单的方法之一是使用shunting
yard算法
将表达式转换为后缀(后缀表达式的求值用大写E表示很容易)。

2020-07-28