C++ 如何用c++;?
我需要用包含数字和字母的方程式做一些基本的数学运算 例如,我有C++ 如何用c++;?,c++,math,C++,Math,我需要用包含数字和字母的方程式做一些基本的数学运算 例如,我有7A+3A=20BC,然后我想得到B=10A/20C=1A/2C 但是,据我所知,C++中不支持用字母来计算算术运算数,所以当我试图把字母(字符)放在int或双内存中时,编译器就会生气。我在想,也许你可以得到字母ascii数字,并以某种方式将该ascii数字“连接”到该字母之前或之后的整数,但我一直无法想出一个这样的代码示例,因为我不知道如何 我不知道如何处理这个问题,所以如果有人知道我如何用字母来应用算术(也许写我自己的方法或类?)
7A+3A=20BC
,然后我想得到B=10A/20C=1A/2C
但是,据我所知,C++中不支持用字母来计算算术运算数,所以当我试图把字母(字符)放在int或双内存中时,编译器就会生气。我在想,也许你可以得到字母ascii数字,并以某种方式将该ascii数字“连接”到该字母之前或之后的整数,但我一直无法想出一个这样的代码示例,因为我不知道如何
我不知道如何处理这个问题,所以如果有人知道我如何用字母来应用算术(也许写我自己的方法或类?)
谢谢 您可以为术语建模:
下一步是将表达式解析为术语。一旦你有了一个
Term
s的容器,你就可以随心所欲地操作它们了
编辑1:你也可以考虑一个<代码>分数类。这将允许您拥有作为分子和分母的术语 另一种方法是对表达式建模: 表达式将包含两个
术语以及它们之间的运算。
还可以考虑表达式树来获得优先级的正确性。在internet上搜索“C++调车场算法”。您需要对代数运算的一些支持,即a
维基百科提供了一个。支持代数操作的自由C++库是。例如,下面的程序
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;
int main()
{
symbol a("a"), b("b"), x("x"), y("y");
lst eqns, vars;
eqns = a*x+b*y==3, x-y==b;
vars = x, y;
cout << " solving " << eqns << '\n'
<< " for " << vars << '\n'
<< " gives: " << lsolve(eqns, vars) << endl;
}
可以使用自定义代数类和运算符重载
class Algebra {
private:
int value;
char variable;
public:
Algebra(int x, char y) {value = x; variable = y;}
void print() { cout << value << variable << endl; }
friend Algebra operator + (Algebra const &, Algebra const &);
};
Algebra operator + (Algebra const &c1, Algebra const &c2)
{
// Return NULL if c1.variable != c2.variable.
return Algebra(c1.value + c2.value, c1.variable);
}
int main()
{
Algebra c1(10, x), c2(2, x);
Algebra c3 = c1 + c2;
c3.print();
return 0;
}
类代数{
私人:
int值;
字符变量;
公众:
代数(intx,chary){value=x;variable=y;}
作废打印(){我想说,用符号逻辑编写一个程序来解决方程不是很简单,你需要重新实现C++中的数学或是一种数学。这是一项非常艰巨的任务,尤其是如果你是初学者。换言之,你可能想研究上下文无关的语法和语法。然而,你所做的事情还是比较复杂的。不仅仅是语法。不要试图写一个程序来解决任意的代数问题。解决你特定的代数问题,然后在需要的时候写一个程序,在代数中运行数字to@Jacob方程式通常由计算机使用各种算法求解,而不是像在学校那样通过代数学例如,一个线性方程组将在计算机上使用矩阵和高斯-乔丹消去法求解,而不是像代数课程中的人类那样通过移动符号来求解。当然,你可以编写一个程序来模拟符号操作,但你正在进入研究生阶段,可能是博士阶段。
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;
int main()
{
symbol a("a"), b("b"), x("x"), y("y");
lst eqns, vars;
eqns = a*x+b*y==3, x-y==b;
vars = x, y;
cout << " solving " << eqns << '\n'
<< " for " << vars << '\n'
<< " gives: " << lsolve(eqns, vars) << endl;
}
solving {x*a+y*b==3,x-y==b}
for {x,y}
gives: {x==(a+b)^(-1)*(3+b^2),y==-(-3+a*b)*(a+b)^(-1)}
class Algebra {
private:
int value;
char variable;
public:
Algebra(int x, char y) {value = x; variable = y;}
void print() { cout << value << variable << endl; }
friend Algebra operator + (Algebra const &, Algebra const &);
};
Algebra operator + (Algebra const &c1, Algebra const &c2)
{
// Return NULL if c1.variable != c2.variable.
return Algebra(c1.value + c2.value, c1.variable);
}
int main()
{
Algebra c1(10, x), c2(2, x);
Algebra c3 = c1 + c2;
c3.print();
return 0;
}