多项式类的c++,里面一个小问题,求解,谢谢

时间:2022-11-29 19:30:39


#include <iostream>
#include<algorithm>
using namespace std;

class Polynomial;
class Term{//多项式的每一项
friend Polynomial;
public:
float coef;//系数
int exp;//指数
};

class Polynomial{//多项式类
friend ostream & operator<<(ostream &o,const Polynomial & poly);
public:
Polynomial();
Polynomial(const Polynomial & poly);
~Polynomial();
Polynomial operator+(const Polynomial & poly);//多项式加法
Polynomial operator*(const Polynomial & poly);//多项式乘法
float Eval(float x);//数x代入多项式求值
void NewTerm(float coef,int exp);//添加一项,若有相同的指数项,则合并
private:
void insertTerm(const Term & term);//项的有序插入
private:
Term *termArray;//非零系数项数组
int capacity;//数组大小
int terms;//非零系数的项数
};

Polynomial::Polynomial()
{
this->terms=0;
this->capacity=10;
termArray=new Term[this->capacity];
}

Polynomial::Polynomial(const Polynomial & b)
{
this->terms=0;
this->capacity=b.capacity;
termArray = new Term[this->capacity];
for(int i=0;i<b.terms;i++){
NewTerm(b.termArray[i].coef,b.termArray[i].exp);
}
}

Polynomial::~Polynomial()
{
delete [] termArray;
}

Polynomial Polynomial::operator+(const Polynomial & b)
{
Polynomial c;
int aPos=0;
int bPos=0;
while(aPos<terms && bPos<b.terms){
if(termArray[aPos].exp == b.termArray[bPos].exp){
float coef=termArray[aPos].coef+b.termArray[bPos].coef;
if(coef)c.NewTerm(coef,termArray[aPos].exp);
aPos++;bPos++;
}else if(termArray[bPos].exp < b.termArray[bPos].exp){
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;
}else{
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;
}
}
while (aPos < terms){
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;
}
while (bPos < b.terms){
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;
}
return c;
}

Polynomial Polynomial::operator*(const Polynomial & b)
{
Polynomial c;
for(int i=0; i<terms; i++){
for(int j=0; j<b.terms; j++){
float coef = termArray[i].coef*b.termArray[j].coef;
int exp = termArray[i].exp + b.termArray[j].exp;
c.NewTerm(coef,exp);
}
}
return c;
}
void Polynomial::NewTerm(float coef, int exp)
{
if(terms == capacity){
capacity *= 2;
Term *tmp = new Term[capacity];
copy(termArray,termArray+terms,tmp);
delete [] termArray;
termArray = tmp;
}
Term ATerm;
ATerm.coef=coef;ATerm.exp=exp;
insertTerm(ATerm);
}
void Polynomial::insertTerm(const Term & term)
{
int i;
for(i=0; i<terms && term.exp<termArray[i].exp; i++){
}
if(term.exp == termArray[i].exp){
termArray[i].coef += term.coef;
if(!termArray[i].coef){
for(int j=i; j<terms-1; j++)
termArray[j]= termArray[j+1];
terms--;
}
}else{
for(int j=terms-1; j>=i;j--)
termArray[j+1]=termArray[j];
termArray[i] = term;
terms++;
}
}

float Polynomial::Eval(float x)
{
float res=0.0;
for(int i=0;i<terms; i++){
        res += termArray[i].coef * pow(x,termArray[i].exp);  //pow没有定义,求解释
}
return res;
}

ostream & operator<<(ostream & o,const Polynomial & poly)
{
for(int i=0;i<poly.terms-1;i++){
o<<poly.termArray[i].coef<<"x^"<<poly.termArray[i].exp<<" + ";
}
o<<poly.termArray[poly.terms-1].coef<<"x^"<<poly.termArray[poly.terms-1].exp;
return o;
}

void test()
{
Polynomial p1;
p1.NewTerm(3,2);
p1.NewTerm(2.1,3);

Polynomial p2;
p2.NewTerm(1,2);
p2.NewTerm(1,3);
p2.NewTerm(5,1);

cout<<"("<<p1<<") + ("<<p2<<") = "<<p1+p2<<endl;
cout<<"F(x=2) = "<<(p1+p2).Eval(2)<<endl;
cout<<"("<<p1<<") * ("<<p2<<") = "<<p1 * p2<<endl;
}

int main()
{
                test();
                system("Pause");
                return 0;
}

10 个解决方案

#1


问问题:
 简单说下你代码的思路
 简单说下不明白的地方
 简单说下代码有问题的地方,未到达的某种目的!

 我一个都没看到,就是一个堆源码 多项式类的c++,里面一个小问题,求解,谢谢
 
  

#2


这个多项式算出来结果不对。pow是C/C++中的数学函数原型:在TC2.0中原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y );头文件:math.h/cmath(C++中)。不懂你的目的是什么、

#3


谢谢回答,这个代码不是我写的,因为发现算出来结果不对, 那我在c++里面的头文件应该放什么

#include <math.h>


还有我使用codelite 跑的,那属于tc2.0么

#4


#include <math.h>
#include <cmath>
这两个头文件都可以使用。这个C/C++函数库。编译器自带的。
你可以自己写一个流程图,整理一下思路。这个多项式小项目很好些的。
练练手。

#5


谢谢,我再理理思路,通过打印,发现算多项式的值的时候,就算是四个多项式,它只算两个,很奇怪

#6


解决了吗?要不你加我Q和你闲聊。

#7


引用 6 楼 qqwenqqqi 的回复:
解决了吗?要不你加我Q和你闲聊。
多项式类的c++,里面一个小问题,求解,谢谢, 没解决呢,发现了问题,请问你的qq多少

#8


最好还是自己设断点,调试下。别人能帮你一次两次,但不能帮你一辈子。简单的调试是一个程序员必须的。

还有问问题的时候,请把问题说清楚,不要让人到下面找。如果编译没问题,你也可以贴一点实际结果和你的预期结果什么的...不然真心不知道你想问什么。

#9


引用 8 楼 Adol1111 的回复:
最好还是自己设断点,调试下。别人能帮你一次两次,但不能帮你一辈子。简单的调试是一个程序员必须的。

还有问问题的时候,请把问题说清楚,不要让人到下面找。如果编译没问题,你也可以贴一点实际结果和你的预期结果什么的...不然真心不知道你想问什么。


谢谢指导,我正在自己一段一段查,我会注意发帖要求的.

#10


你好,请问带入x输出错误结果是哪里不行?

#1


问问题:
 简单说下你代码的思路
 简单说下不明白的地方
 简单说下代码有问题的地方,未到达的某种目的!

 我一个都没看到,就是一个堆源码 多项式类的c++,里面一个小问题,求解,谢谢
 
  

#2


这个多项式算出来结果不对。pow是C/C++中的数学函数原型:在TC2.0中原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y );头文件:math.h/cmath(C++中)。不懂你的目的是什么、

#3


谢谢回答,这个代码不是我写的,因为发现算出来结果不对, 那我在c++里面的头文件应该放什么

#include <math.h>


还有我使用codelite 跑的,那属于tc2.0么

#4


#include <math.h>
#include <cmath>
这两个头文件都可以使用。这个C/C++函数库。编译器自带的。
你可以自己写一个流程图,整理一下思路。这个多项式小项目很好些的。
练练手。

#5


谢谢,我再理理思路,通过打印,发现算多项式的值的时候,就算是四个多项式,它只算两个,很奇怪

#6


解决了吗?要不你加我Q和你闲聊。

#7


引用 6 楼 qqwenqqqi 的回复:
解决了吗?要不你加我Q和你闲聊。
多项式类的c++,里面一个小问题,求解,谢谢, 没解决呢,发现了问题,请问你的qq多少

#8


最好还是自己设断点,调试下。别人能帮你一次两次,但不能帮你一辈子。简单的调试是一个程序员必须的。

还有问问题的时候,请把问题说清楚,不要让人到下面找。如果编译没问题,你也可以贴一点实际结果和你的预期结果什么的...不然真心不知道你想问什么。

#9


引用 8 楼 Adol1111 的回复:
最好还是自己设断点,调试下。别人能帮你一次两次,但不能帮你一辈子。简单的调试是一个程序员必须的。

还有问问题的时候,请把问题说清楚,不要让人到下面找。如果编译没问题,你也可以贴一点实际结果和你的预期结果什么的...不然真心不知道你想问什么。


谢谢指导,我正在自己一段一段查,我会注意发帖要求的.

#10


你好,请问带入x输出错误结果是哪里不行?