C++ 如何 Expand/Factorise 方程(不求解)
C++ How do I Expand/Factorise equation (without solving it)
我是 C++ 的初学者,我正在尝试寻找是否有一个函数允许 "scan" 输入以检测输入的方程类型。
基本上,我想做的是输入类似 (a-b)^2
的内容,程序会将其扩展为 a^2-2*a*b+b^2
或输入 ax^2+by+c
,程序会给我 a(x-α)+β
.
我之前所做的只是询问要输入什么类型的方程式,然后具体询问每个因素是什么(像这样):
int a, a2;
int b, b2;
int inbetween;
cout << "Equation of type (ax+by)^2.\nPlease enter the factor of X : ";
cin >> a;
cout << "Please enter the factor of Y : ";
cin >> b;
a2 = a*a; //pow(a,2)
b2 = b*b; //pow(b,2)
inbetween = 2*a*b;
cout << "(" << a << "x + " << b << "y" << ")^2 = " << a2 << "x + " << inbetween << "xy + " << b2 << "y\n";
// (ax + by)^2 = a^2x + 2*a*b*xy + b^2y
但这正是我不想做的。
我想知道是否有办法扩展编码程序支持的任何类型方程的输入。
我希望我说得足够清楚,英语不是我的主要语言我发现我想要交流的内容并不是很清楚。
你的问题够清楚了(IMO其实是个很有意思的问题)。
是的,这是可能的,但据我所知,没有简单的方法可以做到这一点;你必须自己编程。我认为你的程序就这样很好。
有一整个数学领域称为语言理论,它研究您刚才提出的问题。为了让您了解此类问题的解决方案,解决此问题的最佳方法是编写您自己的语法。在编写解析器之前,您必须正式详细说明语法规则,并使用 regular expressions (then you would have two problems ;D ).
实现规则
从你的问题来看,这需要大量的编程,比如说,95% 的代码将决定它是什么类型的表达式并提取值,剩下的 5% 只是扩大或因式分解。如果你问我,为一个简单的程序付出了太多的努力。
我认为 Anthony D. 很好地总结了答案,基本上您正在寻找词法分析器和语法分析器。如果您有兴趣了解更多信息,值得将您(以及可能发现您问题的其他人)引向 Yacc documentation。虽然很多文档都是针对 Yacc 的,但它写得很好并且足够详细,可以帮助您解决这个问题的不同挑战和复杂性。另外,如果你最终想构建一个计算器,这里有很多 Yacc 计算器示例,你可以作为参考。
我是 C++ 的初学者,我正在尝试寻找是否有一个函数允许 "scan" 输入以检测输入的方程类型。
基本上,我想做的是输入类似 (a-b)^2
的内容,程序会将其扩展为 a^2-2*a*b+b^2
或输入 ax^2+by+c
,程序会给我 a(x-α)+β
.
我之前所做的只是询问要输入什么类型的方程式,然后具体询问每个因素是什么(像这样):
int a, a2;
int b, b2;
int inbetween;
cout << "Equation of type (ax+by)^2.\nPlease enter the factor of X : ";
cin >> a;
cout << "Please enter the factor of Y : ";
cin >> b;
a2 = a*a; //pow(a,2)
b2 = b*b; //pow(b,2)
inbetween = 2*a*b;
cout << "(" << a << "x + " << b << "y" << ")^2 = " << a2 << "x + " << inbetween << "xy + " << b2 << "y\n";
// (ax + by)^2 = a^2x + 2*a*b*xy + b^2y
但这正是我不想做的。
我想知道是否有办法扩展编码程序支持的任何类型方程的输入。
我希望我说得足够清楚,英语不是我的主要语言我发现我想要交流的内容并不是很清楚。
你的问题够清楚了(IMO其实是个很有意思的问题)。
是的,这是可能的,但据我所知,没有简单的方法可以做到这一点;你必须自己编程。我认为你的程序就这样很好。
有一整个数学领域称为语言理论,它研究您刚才提出的问题。为了让您了解此类问题的解决方案,解决此问题的最佳方法是编写您自己的语法。在编写解析器之前,您必须正式详细说明语法规则,并使用 regular expressions (then you would have two problems ;D ).
实现规则从你的问题来看,这需要大量的编程,比如说,95% 的代码将决定它是什么类型的表达式并提取值,剩下的 5% 只是扩大或因式分解。如果你问我,为一个简单的程序付出了太多的努力。
我认为 Anthony D. 很好地总结了答案,基本上您正在寻找词法分析器和语法分析器。如果您有兴趣了解更多信息,值得将您(以及可能发现您问题的其他人)引向 Yacc documentation。虽然很多文档都是针对 Yacc 的,但它写得很好并且足够详细,可以帮助您解决这个问题的不同挑战和复杂性。另外,如果你最终想构建一个计算器,这里有很多 Yacc 计算器示例,你可以作为参考。