مسئله ی جمع و تفریق و ضرب و تقسیم چند جمله ای ها ( زبان ++C

کد:
#include<conio.h> 
#include<iostream.h> 
#define Max 20 
class Poly; 
class PolyNode 
{ 
friend Poly; 
float Coef; 
int Pow; 
}; 
class Poly 
{ 
int n; 
PolyNode Data[Max]; 
public: 
void Poly::SortPoly(void); 
void ReadPoly(void); 
void WritePoly(void); 
void AddPoly(Poly a,Poly b); 
void SubtractPoly(Poly a,Poly b); 
void MulPoly(Poly a,Poly b); 
void Poly::ItemPoly(float Coef,int Pow,Poly b); 
void Poly::TaghsimPoly(int k,Poly a,Poly b); 
}; 
void Poly::SortPoly(void) 
{ 
int i,j; 
PolyNode item; 
for(i=n-1;i>0;i--) 
for(j=0;j<i;j++) 
if(Data[j].Pow<Data[j+1].Pow) 
{ 
item=Data[j]; 
Data[j]=Data[j+1]; 
Data[j+1]=item; 
} 
while(i<n-1) 
if(Data[i].Pow==Data[i+1].Pow) 
{ 
Data[i].Coef+=Data[i+1].Coef; 
for(j=i+1;j<n-1;j++)Data[j]=Data[j+1]; 
n--; 
}else i++; 
} 
void Poly::ReadPoly(void) 
{ 
int i; 
cout<<"\nPlease enter parts of poly : "; 
cin>>n; 
cout<<"\nPlease enter Polynomial : \n\n"; 
for(i=0;i<n;i++) 
{ 
cin>>Data[i].Coef; 
cout<<" x^"<<endl; 
cin>>Data[i].Pow; 
cout<<" +"<<endl; 
} 
} 
void Poly::WritePoly(void) 
{ 
int i; 
cout<<"\n"; 
for(i=0;i<n;i++)cout<<Data[i].Coef<<"X^"<<Data[i].Pow<<" + "; 
} 
void Poly::AddPoly(Poly a,Poly b) 
{ 
int i,j,k; 
i=j=k=0; 
while(i<a.n&&j<b.n) 
{ 
if(a.Data[i].Pow>b.Data[j].Pow) 
{ 
Data[k].Coef=a.Data[i].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
} 
else if(a.Data[i].Pow<b.Data[j].Pow) 
{ 
Data[k].Coef=b.Data[j].Coef; 
Data[k++].Pow=b.Data[j++].Pow; 
} 
else if(a.Data[i].Coef+b.Data[j].Coef) 
{ 
Data[k].Coef=a.Data[i].Coef+b.Data[j].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
j++; 
} 
else 
{ 
i++; 
j++; 
} 
} 
while(i<a.n) 
{ 
Data[k].Coef=a.Data[i].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
} 
while(j<b.n) 
{ 
Data[k].Coef=b.Data[j].Coef; 
Data[k++].Pow=b.Data[j++].Pow; 
} 
n=k; 
} 
void Poly::SubtractPoly(Poly a,Poly b) 
{ 
int i,j,k; 
i=j=k=0; 
while(i<a.n&&j<b.n) 
{ 
if(a.Data[i].Pow>b.Data[j].Pow) 
{ 
Data[k].Coef=a.Data[i].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
} 
else if(a.Data[i].Pow<b.Data[j].Pow) 
{ 
Data[k].Coef=b.Data[j].Coef; 
Data[k++].Pow=b.Data[j++].Pow; 
} 
else if(a.Data[i].Coef-b.Data[j].Coef) 
{ 
Data[k].Coef=a.Data[i].Coef-b.Data[j].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
j++; 
} 
else 
{ 
i++; 
j++; 
} 
} 
while(i<a.n) 
{ 
Data[k].Coef=a.Data[i].Coef; 
Data[k++].Pow=a.Data[i++].Pow; 
} 
while(j<b.n) 
{ 
Data[k].Coef=b.Data[j].Coef; 
Data[k++].Pow=b.Data[j++].Pow; 
} 
n=k; 
} 
void Poly::MulPoly(Poly a,Poly b) 
{ 
int i,j,k; 
i=j=k=0; 
while(i<a.n) 
{ 
j=0; 
while(j<b.n) 
{ 
Data[k].Coef=a.Data[i].Coef*b.Data[j].Coef; 
Data[k++].Pow=a.Data[i].Pow+b.Data[j++].Pow; 
} 
i++; 
} 
n=k; 
} 
void Poly::ItemPoly(float Coef,int Pow,Poly b) 
{ 
int j,t; 
j=t=0; 
while(j<b.n) 
{ 
Data[t].Coef=Coef*b.Data[j].Coef; 
Data[t++].Pow=Pow+b.Data[j++].Pow; 
} 
n=t; 
} 
void Poly::TaghsimPoly(int k,Poly a,Poly b) 
{ 
Poly d,e; 
p: 
if(a.Data[0].Pow>=b.Data[0].Pow) 
{ 
Data[k].Pow=a.Data[0].Pow-b.Data[0].Pow; 
Data[k].Coef=a.Data[0].Coef/b.Data[0].Coef; 
d.ItemPoly(Data[k].Coef,Data[k].Pow,b); 
e.SubtractPoly(a,d); 
k++; 
} 
n=k; 
if(e.Data[0].Pow>=b.Data[0].Pow)TaghsimPoly(k,e,b); 
else 
{ 
cout<<"\nMod Is : \n"; 
e.WritePoly(); 
} 
} 
void main(void) 
{ 
Poly a,b,c; 
char Sign; 
a.ReadPoly(); 
a.SortPoly(); 
cout<<"\nPlease enter sign(+,-,*,/) : "; 
cin>>Sign; 
b.ReadPoly(); 
b.SortPoly(); 
switch(Sign) 
{ 
case'+': 
c.AddPoly(a,b); 
break; 
case'-': 
c.SubtractPoly(a,b); 
break; 
case'*': 
c.MulPoly(a,b); 
c.SortPoly(); 
break; 
case'/': 
c.TaghsimPoly(0,a,b); 
break; 
} 
cout<<"\n\nAnswer Is : \n"; 
c.WritePoly(); 
getche(); 
}
لطفا علامتها را بر عكس كنيد