📄 polynomial.h
字号:
#define defaultsize 255
#include<iostream>
#include<stdio.h>
using namespace std;
class Polynomial{
private:
float *coef; //系数
int *expn; //指数
int num; //多项式中非零项个数
public:
Polynomial(){
coef=new float[defaultsize];
expn=new int[defaultsize];
for(int j=0;j<defaultsize;j++){ coef[j]=0;expn[j]=0;}
num=0;
}
~Polynomial(){delete[]coef;}
void Create();
int Find(int e);
void SetCoef(float c,int i){coef[i]=c;}
float GetCoef(int c){return coef[c];}
void SetExpn(int c,int i){expn[i]=c;}
int GetExpn(int e){return expn[e];}
void sum(Polynomial &pa,Polynomial &pb);
void differential();
void Print();
int cmp(int a,int b);
};
void Polynomial::Create(){ //初试化数据
int e;float m;int i=1;
cout<<"\n请依次输入多项式的系数和指数:(例如:3 4 2 2 4 5 表示 3x^4+2x^2+4x^5)"<<endl;
do{
cin>>m>>e;
if(e>=0){
if(Find(e)!=0) SetCoef(m+GetCoef(Find(e)),Find(e));
else{
SetCoef(m,i);SetExpn(e,i);i++;
if(m!=0) SetExpn(++num,0);
}
}
else cout<<"数据有误!请重新输入!"<<endl;
}while(cin.get()!='\n');
for(int pass=1;pass<GetExpn(0);pass++){
for(int j=1;j<=GetExpn(0)-pass;j++)
if(expn[j]>expn[j+1]){
int temp1=expn[j];expn[j]=expn[j+1];expn[j+1]=temp1;
float temp2=coef[j];coef[j]=coef[j+1];coef[j+1]=temp2;
}
}
}
int Polynomial::Find(int e){
for(int j=1;j<=GetExpn(0);j++){
if(GetExpn(j)==e) return j;
}
return 0;
}
void Polynomial::sum(Polynomial &pa,Polynomial &pb){ //加减法
int i=1,j=1,k=1;
while(i<=pa.GetExpn(0) && j<=pb.GetExpn(0)){
switch(cmp(pa.GetExpn(i),pb.GetExpn(j))){
case -1:
SetExpn(pa.GetExpn(i),k);
SetCoef(pa.GetCoef(i),k);
k++;i++;SetExpn(++num,0);break;
case 0:
if((pa.GetCoef(i)+pb.GetCoef(j))!=0){
SetExpn(pa.GetExpn(i),k);
SetCoef(pa.GetCoef(i)+pb.GetCoef(j),k);
k++;SetExpn(++num,0);
}
i++;j++;break;
case 1:
SetExpn(pb.GetExpn(j),k);
SetCoef(pb.GetCoef(j),k);
k++;j++;SetExpn(++num,0);break;
}
}
if(i>pa.GetExpn(0)) for(j;j<=pb.GetExpn(0);j++){SetExpn(pb.GetExpn(j),k);SetCoef(pb.GetCoef(j),k);k++;SetExpn(++num,0);}
else for(i;i<=pa.GetExpn(0);i++){SetExpn(pa.GetExpn(i),k); SetCoef(pa.GetCoef(i),k);k++;SetExpn(++num,0);}
}
int Polynomial::cmp(int a,int b){
if(a>b) return 1;
if(a==b) return 0;
if(a<b) return -1;
}
void Polynomial::differential(){ //求导
int i;
if(GetExpn(0)==0) SetExpn(0,0);
else if(GetExpn(1)==0){
for(i=2;i<=GetExpn(0);i++){
SetCoef(GetExpn(i)*GetCoef(i),i-1);
SetExpn(GetExpn(i)-1,i-1);
}
SetExpn(GetExpn(0)-1,0);
}
else for(i=1;i<=GetExpn(0);i++){
SetCoef(GetExpn(i)*GetCoef(i),i);
SetExpn(GetExpn(i)-1,i);
}
}
void Polynomial::Print(){ //打印
cout<<"为"<<GetExpn(0)<<"次多项式:";
for(int j=GetExpn(0);j>0;j--){
cout<<" "<<coef[j]<<"x^"<<expn[j];
}
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -