急!!!!!!用c++类实现多项式相加结果出错了 帮忙指示下

cx968968 2009-03-02 11:53:39
#include <stdlib.h>
#include <stdio.h>
#include<iostream.h>
#include<fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
# define maxsize 100
# define Null 0
class poly
{
private :
int n;
double *p_c;
void set (const double *p_a,int m);
public :
poly () ;
poly (const double *p_a,int m);
poly (const poly &r);
~poly (){delete []p_c;}
int degree ()const {return n;}
void input();
void output() const;
poly &operator = (const poly &r) ;
poly operator + (const poly &r) const;
};
poly::poly()
{

n=0;
p_c=new double[maxsize];

}
void poly::set (const double *p_a,int m)
{
n=m;
int i;
p_c=new double [maxsize];
if (p_c==Null) exit(1);
for (i=0;i<=n;i++)
p_c[i]=p_a[i];
for (i=n+1;i<maxsize;i++)
p_c[i]=0;
}
poly ::poly (const double *p_a,int m)
{
set (p_a,m);
}
poly ::poly (const poly &r)
{
set (r.p_c,r.n);
}
void poly::input()
{
int s,x,m,i,max=0;double c;
in>>x;s=x;
for (i=0;i<maxsize;i++)
p_c[i]=0;
for (i=s;i>0;i--)
{
in>>c>>m;
p_c[m]=c;
max=m>max?m:max;
}
n=max;
}

void poly::output() const
{
poly e(*this);int i,sign=0;
double *a=e.p_c; int b=e.n;
for (i=b;i>=0;i--)
{
if (a[i]==0) continue;
else sign+=1;
if (sign==2) {sign-=1;out<<"+";}
if ((i==1)&&(a[i]!=1)) {out<<a[i]<<"x";continue;}
if ((i==1)&&(a[i]==1)) {out<<"x";continue;}
if (i==0) {out<<a[i];continue;}
if (a[i]==1) {out<<"x^"<<i;continue;}
out<<a[i]<<"x^"<<i;
}
}
poly &poly::operator = (const poly &r)
{
if (p_c!=0) delete []p_c;
p_c=new double [maxsize];
n=r.n;
p_c=r.p_c;
return *this;
}
poly poly::operator +(const poly &r) const
{
poly e(*this);poly a;
int i;
e.n=e.n>r.n?e.n:r.n;
for (i=e.n;i>=0;i--)
e.p_c[i]=e.p_c[i]+r.p_c[i];
return e;
}
int main ()
{
int k,i;
in>>k;
poly *f=new poly[k+1];
char *string=new char [k];
for (i=1;i<k+1;i++)
f[i].input();
f[1].output();
f[2].output();
f[3].output();
f[2]=f[3]+f[1];
f[2].output();
return 0;
}
intput.txt 我的output。txt
3
3 3x^3+4x+6 6x^2+1 3x
3 3 -1.45682e+144x^3+-1.45682e+144x^2+-1.45682e+144x+-1.45682e+144 /就这个输出不对/不知为什么。
4 1
6 0 初学c++;讲详细点;先谢了!
2
6 2
1 0
1
3 1
...全文
124 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cx968968 2009-03-03
  • 打赏
  • 举报
回复
不明白 我是先删除原有空间 13楼的能把这段代码改下吗?
lightnut 2009-03-03
  • 打赏
  • 举报
回复
需要修改三个地方

void poly::output() const
{
out<<"\n"; //<=== 1. 每个poly另起一行输出, 比较清楚

poly e(*this);int i,sign=0;
double *a=e.p_c; int b=e.n;
for (i=b;i>=0;i--)
{
if (a[i]==0) continue;
else sign+=1;
if (sign==2) {sign-=1;out <<"+";}
if ((i==1)&&(a[i]!=1)) {out <<a[i] <<"x";continue;}
if ((i==1)&&(a[i]==1)) {out <<"x";continue;}
if (i==0) {out <<a[i];continue;}
if (a[i]==1) {out <<"x^" <<i;continue;}
out <<a[i] <<"x^" <<i;
}


}

poly &poly::operator = (const poly &r)
{
if (p_c!=0) delete []p_c;
p_c=new double [maxsize];
n=r.n;
for (int i=0; i<maxsize; ++i) { // <=====2 要copy每一项的系数
p_c[i]=r.p_c[i];
}
return *this;
}

poly poly::operator +(const poly &r) const
{
poly e(*this);poly a;
int i;
e.n=n>r.n?n:r.n; // <====3 确定最大的x系数
for (i=e.n;i>=0;i--)
e.p_c[i]=e.p_c[i]+r.p_c[i];
return e;
}

xtting_8984313 2009-03-03
  • 打赏
  • 举报
回复
poly ::poly (const poly &r)
{
set (r.p_c,r.n);
}



这里有问题,为何没有分配内存呢?


poly  &poly::operator = (const poly &r) 
{
if (p_c!=0) delete []p_c;
p_c=new double [maxsize];
n=r.n;
p_c=r.p_c;
return *this;
}

不规范,考虑到异常了吗?应该先new出来,然后swap过去,再删除,看一下effective c++相关条款吧。
cx968968 2009-03-03
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
# define maxsize 100
# define Null 0
class poly
{
private :
int n;
double *p_c;
void set (const double *p_a,int m);
public :
poly () ;
poly (const double *p_a,int m);
poly (const poly &r);
~poly (){delete []p_c;}
int degree ()const {return n;}
void input();
void output() const;
poly &operator = (const poly &r) ;
poly operator + (const poly &r) const;
};
poly::poly()
{

n=0;
p_c=new double[maxsize];

}
void poly::set (const double *p_a,int m)
{
n=m;
int i;
p_c=new double [maxsize];
if (p_c==Null) exit(1);
for (i=0;i <maxsize;i++)
p_c[i]=p_a[i];

}
poly ::poly (const double *p_a,int m)
{
set (p_a,m);
}
poly ::poly (const poly &r)
{
set (r.p_c,r.n);
}
void poly::input()
{
int s,x,m,i,max=0;double c;
in>>x;s=x;
for (i=0;i <maxsize;i++)
p_c[i]=0;
for (i=s;i>0;i--)
{
in>>c>>m;
p_c[m]=c;
max=m>max?m:max;
}
n=max;
}

void poly::output() const
{
poly e(*this);int i,sign=0;
double *a=e.p_c; int b=e.n;
for (i=b;i>=0;i--)
{
if (a[i]==0) continue;
else sign+=1;
if (sign==2) {sign-=1;out < <"+";}
if ((i==1)&&(a[i]!=1)) {out < <a[i] < <"x";continue;}
if ((i==1)&&(a[i]==1)) {out < <"x";continue;}
if (i==0) {out < <a[i];continue;}
if (a[i]==1) {out < <"x^" < <i;continue;}
out < <a[i] < <"x^" < <i;
}
}
poly &poly::operator = (const poly &r)
{
if (p_c!=0) delete []p_c;
p_c=new double [maxsize];
n=r.n;
p_c=r.p_c;
return *this;
}
poly poly::operator +(const poly &r) const
{
poly e(*this);poly a;
int i;
e.n=e.n>r.n?e.n:r.n;
for (i=e.n;i>=0;i--)
e.p_c[i]=e.p_c[i]+r.p_c[i];
return e;
}
int main ()
{
int k,i;
in>>k;
poly *f=new poly[k+1];
char *string=new char [k];
for (i=1;i <k+1;i++)
f[i].input();
f[1].output();
f[2].output();
f[3].output();
f[2]=f[3]+f[1];
f[2].output();
return 0;
}
xtting_8984313 2009-03-03
  • 打赏
  • 举报
回复
贴个好点的格式吧,看着头晕。
cx968968 2009-03-03
  • 打赏
  • 举报
回复
就是一个类 类的成员函数定义比较长了 辛苦了、忘了注释、
cx968968 2009-03-03
  • 打赏
  • 举报
回复
五楼的说的对 就是想这样加
lingyin55 2009-03-03
  • 打赏
  • 举报
回复
up
cx968968 2009-03-03
  • 打赏
  • 举报
回复
input.txt是个文件 数据要从文件读入 结果输出到output.txt
  • 打赏
  • 举报
回复
楼主..你代码这么长,又没注释,好累啊.
jakqigle 2009-03-03
  • 打赏
  • 举报
回复
两个多项式的系数并行匹配,为相同项的时候其二者系数相加......
healer_kx 2009-03-03
  • 打赏
  • 举报
回复
。。。 。。。
调试啊,都是数字,算呗。
cx968968 2009-03-03
  • 打赏
  • 举报
回复
第一个3是指3个多项式
3 /这个多项式的项数
33
41 左边这是一个多项式 第一列的3 4 6是系数 第二列是指数(幂) 就是表示3x^3+4x+6
60
下面的数据就跟上面一样的意思
p_c【i】的值是系数 i是指数
xuruichen 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hqin6 的回复:]
能不能说下你的input.txt是啥意思?怎么存储的,存储的是啥?
[/Quote]

楼主你没讲清楚啊!
太乙 2009-03-03
  • 打赏
  • 举报
回复
能不能说下你的input.txt是啥意思?怎么存储的,存储的是啥?
cx968968 2009-03-03
  • 打赏
  • 举报
回复
谢谢 了 解决了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧