如何在C ++中用字母做简单的数学操作数?

时间:2018-10-22 15:37:54

标签: c++ math

我需要使用包含数字和字母的方程式来做一些基本的数学操作数。

例如,我有7A + 3A = 20BC,那么我想得到那个B = 10A/20C = 1A/2C

但是,据我所知,C ++不支持用字母进行算术操作数,因此,只要我尝试将字母(字符)放入int或double内存中,编译器就会生气。我在想,也许您可​​以获取字母ascii号,并以某种方式将该ascii号“连接”到该字母之前或之后的整数,但是自那时以来,我一直无法提供代码示例,嗯,我不知道如何。

我不知道如何进行此操作,因此,如果有人知道如何使用字母进行算术运算(也许为此编写自己的方法或类?),我将非常感谢您的回答。

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以为一个建模:

struct Term
{
  double coefficient;
  char   variable_name;
  double exponent;
};

下一步是将表达式解析成术语。
拥有Term的容器后,您可以随时对其进行操作。

编辑1:
您可能还需要考虑一个Fraction类。这将使您可以将术语作为分子和分母。

另一种方法是对表达式进行建模:

class Expression
{
  Term a;
  Term b;
  std::string operation;
};

表达式将包含两个Terms以及它们之间的运算。
还可以考虑使用表达式树来获得正确的优先级。在互联网上搜索“ C ++调车场算法”。

答案 1 :(得分:2)

您需要一些对代数运算的支持,即computer algebra system (CAS)

维基百科提供了list of such systems。支持代数运算的免费C ++库是GiNaC。例如下面的程序

#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)}

答案 2 :(得分: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; 
}