[問題] 程式碼跑不出來...
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
我寫了一個要求用overload作加減乘除運算的式子
但是他輸入完我要求計算的東西以後就完全沒動靜
希望得到的正確結果:
輸入兩個多項式以後正確的計算結果
程式跑出來的錯誤結果:
沒在動= ="
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
dev-c++ 4.9.9.2
有問題的code: (請善用置底文標色功能)
//polynomial.h
#include<iostream>
#include<cstdlib>
#include<cstring>
#include <math.h>
using namespace std;
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
class polynomial
{
friend void getpolynomial(const polynomial &);
public:
polynomial();
~polynomial();
void setpolynomial(const char*);
polynomial operator+(const polynomial &);
polynomial operator-(const polynomial &);
polynomial operator*(const polynomial &);
polynomial operator=(const polynomial &);
polynomial operator+=(const polynomial &);
polynomial operator-=(const polynomial &);
polynomial operator*=(const polynomial &);
void combinesame();
void degdown();
private:
int *exp,*co,*jdg;
int num;
};
#endif
//polynomial.cpp
polynomial::polynomial()
{ num=0;
char *p=new char[strlen(p)+10];
cout<<"請輸入您想計算的多項式:"<<endl;
cin.getline(p,(strlen(p)+10));
for(int a=0;a<strlen(p)+10;a++)
{ if(p[a]=='x')
num=num+1;
}
if(p[0]!='-')
{
char *p1=new char[strlen(p)+2];
p1[0]='+';
for(int p2=1;p2<strlen(p)+1;p2++)
{p1[p2]=p[p2-1];
}
for(int p3=0;p3<strlen(p)+1;p3++)
{p[p3]=p1[p3];
}
}
for(int ch1=0;ch1<strlen(p)+1;ch1++)
{if((p[ch1]=='x')&&((p[ch1+1]=='+')||(p[ch1+1]=='-')||(p[ch1+1]=='*')||(p[ch1+1]=='\0')))
{char *p3=new char[strlen(p)+3];
for(int ch2=0;ch2<strlen(p)+1;ch2++)
{p3[ch2]=p[ch2];
}
for(int ch3=0;ch3<strlen(p)+2;ch3++)
{ if(ch3<ch1)
p[ch3]=p3[ch3];
if(ch3==ch1)
{p[ch3]='x';
p[ch3+1]='^';
p[ch3+2]='1';
}
if(ch3>ch1)
{p[ch3]=p3[ch3-2];
}
}
delete []p3;
}
if((p[ch1]=='+')||(p[ch1]=='-')||(p[ch1]=='*'))
{ int ch4;
for(ch4=1;ch4<strlen(p);ch4++)
{if((p[ch1+ch4]=='+')||(p[ch1+ch4]=='-')||(p[ch1+ch4]=='*')||(p[ch1+ch4]=='x')||(p[ch1+ch4]=='\0'))
break;
}
if(p[ch1+ch4]!='x')
{char *p4=new char[strlen(p)+4];
for(int ch5=0;ch5<strlen(p)+1;ch5++)
{p4[ch5]=p[ch5];
}
for(int ch6=0;ch6<strlen(p)+3;ch6++)
{if(ch6<=(ch1+ch4))
p[ch6]=p4[ch6];
if(ch6=(ch1+ch4))
{p[ch6]='x';
p[ch6+1]='^';
p[ch6+2]='0';
}
if(ch6>=(ch1+ch4+3))
{ p[ch6]=p4[ch6-3];
}
}
delete []p4;
}
}
}
exp=new int[num];
co=new int[num];
for(int i=0;i<strlen(p);i++)
{ exp[i]=0;
co[i]=0;
jdg[i]=0;
}
setpolynomial(p);
}
polynomial::~polynomial()
{
}
void polynomial::setpolynomial(const char *set)
{
char *s1,*s2,*s3,*s4;
char *s= new char[num+1];
strcpy(s,set);
int a=0;
for(int i=0;i<num;i++)
{
if(s[i]=='^')
{int j=1;
while(j!=0)
{ if((s[i+j]=='+')||(s[i+j]=='-')||(s[i+j]=='*')||(s[i+j]=='\0'))
{*s1=s[i+1];
for(int k=2;k<j;k++)
{*s2=s[i+k];
strcat(s1,s2);
exp[a]=atoi(s1);
}
break;
}
else
j++;
}
}
if((s[i]=='+')||(s[i]=='-')||(s[i]=='*'))
{int l=1;
while(l!=0)
{if(s[i+l]=='x')
{*s3=s[i+1];
for(int m=2;m<l;m++)
{*s4=s[i+m];
strcat(s3,s4);
co[a]=atoi(s3);
}
break;
}
else
l++;
}
}
a++;
if(s[i]=='-')
{jdg[i]=1;
}
if(s[i]=='*')
{jdg[i]=2;
}
}
}
void getpolynomial(const polynomial&A)
{
for(int pt1=0;pt1<A.num;pt1++)
{if(A.co[pt1]>0)
{cout<<"+";
}
if(((A.exp[pt1]!=1)||(A.exp[pt1]!=0))&&(A.co[pt1]!=0))
{cout<<A.co[pt1]<<"x^"<<A.exp[pt1];
}
if((A.exp[pt1]==1)&&(A.co[pt1]!=0))
{cout<<A.co[pt1]<<"x";
}
if((A.exp[pt1]==0)&&(A.co[pt1]!=0))
{cout<<A.co[pt1];
}
}
cout<<endl;
}
polynomial polynomial::operator+(const polynomial &plus)
{
polynomial temp1;
temp1=*this;
for(int p1=0;p1<temp1.num;p1++)
for(int p2=0;p2<plus.num;p2++)
{if(temp1.exp[p1]==plus.exp[p2])
temp1.co[p1]+=plus.exp[p1];
}
return temp1;
}
polynomial polynomial::operator-(const polynomial &minus)
{ polynomial temp2;
temp2=*this;
for(int m1=0;m1<temp2.num;m1++)
for(int m2=0;m2<minus.num;m2++)
{if(temp2.exp[m1]==minus.exp[m2])
temp2.co[m1]-=minus.exp[m1];
}
return temp2;
}
polynomial polynomial::operator*(const polynomial &multiply)
{ polynomial temp3;
temp3=*this;
for(int mu1=0;mu1<temp3.num;mu1++)
for(int mu2=0;mu2<multiply.num;mu2++)
{temp3.exp[mu1]+=multiply.exp[mu2];
temp3.co[mu1]*=multiply.co[mu2];
}
combinesame();
return temp3;
}
polynomial polynomial::operator=(const polynomial &equal)
{ polynomial temp4;
temp4=*this;
for(int eq=0;eq<equal.num;eq++)
{temp4.exp[eq]=equal.exp[eq];
temp4.co[eq]=equal.co[eq];
}
return temp4;
}
polynomial polynomial::operator+=(const polynomial &pluseq)
{ polynomial temp5;
temp5=*this;
for(int peq=0;peq<pluseq.num;peq++)
{if(temp5.exp[peq]==pluseq.exp[peq])
temp5.co[peq]+=pluseq.co[peq];
}
return temp5;
}
polynomial polynomial::operator-=(const polynomial &minuseq)
{ polynomial temp6;
temp6=*this;
for(int meq=0;meq<minuseq.num;meq++)
{if(temp6.exp[meq]==minuseq.exp[meq])
temp6.co[meq]-=minuseq.co[meq];
}
return temp6;
}
polynomial polynomial::operator*=(const polynomial &multieq)
{ polynomial temp7;
temp7=*this;
for(int mueq=0;mueq<multieq.num;mueq++)
{temp7.exp[mueq]+=multieq.exp[mueq];
temp7.co[mueq]*=multieq.co[mueq];
}
combinesame();
return temp7;
}
void polynomial::combinesame()
{
for(int c1=0;c1<num;c1++)
for(int c2=0;c2<num;c2++)
{if((exp[c1]==exp[c2])&&(jdg[c2]==0))
{co[c1]+=co[c2];
exp[c2]=0;
co[c2]=0;
}
if((exp[c1]==exp[c2])&&(jdg[c2]==1))
{co[c1]-=co[c2];
exp[c2]=0;
co[c2]=0;
}
if((jdg[c2]==2)&&(c2==(c1+1)))
{exp[c1]+=exp[c2];
co[c1]*=co[c2];
exp[c2]=0;
co[c2]=0;
}
for(int c3=0;c3<num;c3++)
{if((exp[c3]==0)&&(co[c3]==0))
{co[c3]=co[c3+1];
exp[c3]=exp[c3+1];
exp[c3+1]=0;
co[c3+1]=0;
}
}
}
degdown();
}
void polynomial::degdown()
{
int tdeg;
for(int de1=0;de1<num;de1++)
for(int de2=num-1;de2>de1;de2--)
{
if((exp[de2]==0)&&(co[de2]!=0))
if((exp[de2-1]==0)&&(co[de2-1]==0))
{
co[de2-1]=co[de2];
co[de2]=0;
}
if(fabs(exp[de2])>fabs(exp[de2-1]))
{
tdeg=exp[de2-1];
exp[de2-1]=exp[de2];
exp[de2]=tdeg;
tdeg=co[de2-1];
co[de2-1]=co[de2];
co[de2]=tdeg;
}
}
}
//test.cpp
int main()
{
polynomial F,G;
cout<<"F+G"<<endl;
getpolynomial(F+G);
cout<<"F-G"<<endl;
getpolynomial(F-G);
cout<<"F*G"<<endl;
getpolynomial(F*G);
cout<<"F+=G"<<endl;
getpolynomial(F+=G);
cout<<"F-=G"<<endl;
getpolynomial(F-=G);
cout<<"F*=G"<<endl;
getpolynomial(F*=G);
getchar();
return 0;
}
補充說明:
我的想法是
分別輸入兩組多項式存入陣列當作字串
然後如果多項式的最前面項不是負的
就加上"+"
如果多項式有一次項 就加上"^1"
如果多項式有常數 在常數後面加上"x^0"
然後宣告兩個private的陣列exp[]和co[]
分別儲存指數項和係數項
指數像是用"^"和加減乘或是結束字元中間的東西轉成int
係數像是用加減乘到x中間的字元轉成int
然後整理多項式,同類項合併
再按照降冪排列方式排下來
然後就overload運算
輸出結果
但是不知道問題在哪才輸入一個東西就完全沒動靜了...
p.s.原來應該是分成三個檔案
分別是polynomial.h polynomial.cpp test.cpp
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.181
※ 編輯: ps0204 來自: 140.112.4.181 (01/23 01:06)
→
01/23 01:06, , 1F
01/23 01:06, 1F
→
01/23 01:09, , 2F
01/23 01:09, 2F
→
01/23 01:14, , 3F
01/23 01:14, 3F
→
01/23 01:21, , 4F
01/23 01:21, 4F
→
01/23 01:21, , 5F
01/23 01:21, 5F
→
01/23 02:14, , 6F
01/23 02:14, 6F
→
01/23 02:15, , 7F
01/23 02:15, 7F
→
01/23 02:17, , 8F
01/23 02:17, 8F
→
01/23 02:18, , 9F
01/23 02:18, 9F
→
01/23 02:19, , 10F
01/23 02:19, 10F
→
01/23 02:20, , 11F
01/23 02:20, 11F
→
01/23 23:08, , 12F
01/23 23:08, 12F
→
01/23 23:25, , 13F
01/23 23:25, 13F
→
01/23 23:25, , 14F
01/23 23:25, 14F
→
01/24 00:16, , 15F
01/24 00:16, 15F
→
01/24 00:17, , 16F
01/24 00:17, 16F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章