我必须编写一个程序来测试两个代数表达式是否等价。它应该遵循MDAS优先级和括号分组。为了解决优先级问题,我认为应该为这些表达式实现一个Infix到Postfix Notation转换器。但通过这样做,我无法得出它们等效的结论。
程序应如下所示:用户输入:a*(a+b)=a*a+a*b输出:等效
对于这个问题,我不允许使用计算机代数系统或任何外部库。如果你有实际的代码,请不要发布,我只需要一个解决这个问题的想法。
如果不允许对表达式求值,则必须将它们解析为表达式树。
在那之后,我将通过乘以/除以所有成员来去掉所有括号,使a(b-c)变成a*b-a*c。
然后将所有表达式转换回字符串,确保所有成员按字母顺序排序(a*b,而不是b*a),删除所有空格并比较字符串。
这是一个想法:
您需要首先实现构建表达式树,因为它是表达式的一种非常自然的表示
然后,您可能需要使用关联或分配代数属性,通过开括号等方法来简化它
然后你必须比较树木。这并不明显,因为你需要处理交换运算等中的所有分支排列。例如,你可以对它们进行排序(我指的是分支),然后比较是否相等。此外,您还需要记住参数的可能重命名,即a+b需要等于x+y。