gpt4 book ai didi

C++,加减多项式错误

转载 作者:行者123 更新时间:2023-11-28 05:08:22 25 4
gpt4 key购买 nike

大家好,我的程序有一个小问题。我写了 2 个函数来添加和减去多项式。这是一个用于添加的函数。

Wielomian Wielomian::operator +(Wielomian &w)
{
Wielomian pomW=*this;
Wielomian pomM=w;
if(pomM.st > pomW.st)
{
pomM = *this;
pomW = w;
}
for(int i=pomM.st;i>=0;i--)
{
pomW.wsp[i] = pomW.wsp[i] + pomM.wsp[i];
}
return pomW;
}

我还创建了 2 个多项式。 Wielomian w1("15x^3+x^2+x+2"); 维洛姆 w2("3x^2+x+3");

问题是当我打电话时: cout << w1-w2;第一个多项式较大的地方都可以,但是当我制作时 cout << w2-w1;在第一个多项式较小的地方,程序显示出良好的结果但随后被粉碎。请帮我。减法也是如此。

ostream & operator <<(ostream &wyjscie, const Wielomian &w)
{
for (int i=w.st; i>=0;i--)
{
if(i!=0 && w.wsp[i]!=0)
{
if(i==1)
wyjscie << w.wsp[i] << "x" << (w.wsp[i-1]>0 ? "+" : "");
else
wyjscie << w.wsp[i] << "x^" << i << (w.wsp[i-1]>0 ? "+" : "");
}
else if(i!=0 && w.wsp[i]==0)
{
wyjscie << (w.wsp[i-1]>0 ? "+" : "");
}
else if(i==0)
wyjscie << w.wsp[i];
}
return wyjscie;
}

类的变量:

int st;
int *wsp;

复制构造函数:

Wielomian::Wielomian(Wielomian &w)
{
st=w.st;
wsp = new int[w.st];
for(int i=0; i<=st; i++)
wsp[i]=w.wsp[i];
}

最佳答案

but when im making cout << w2-w1; where the first polynomial is smaller, the program is showing good result but then crushing.

您需要定义复制赋值运算符,在这种情况下使用:

if(pomM.st > pomW.st)
{
pomM = *this;
pomW = w;
}

您还应该在复制构造函数中进行一些更正,以避免在 wsp 数组中越界。

Wielomian::Wielomian(const Wielomian &w) // <-- const
{
st=w.st;
wsp = new int[w.st];
for(int i=0; i < st; i++) // <-- < instead of <=
wsp[i]=w.wsp[i];
}

// assignment operator
Wielomian& operator= (const Wielomian &w)
{ if(st > 0) delete[] wsp;
st=w.st;
wsp = new int[w.st];
for(int i=0; i < st; i++)
wsp[i]=w.wsp[i];

return *this;
}

最后,您可以为 wsp 使用 std::vector,这是推荐的做法,它可以使事情变得更简单且不易出错。 std::vector 将自行管理分配的资源,因此您不需要任何额外的非自定义析构函数、复制构造函数等(参见“零规则”)。 p>

如果您不习惯使用 std::vector,请不要忘记编写自定义析构函数以delete[] wsp。 (参见“三原则”)。

附注另一个越界访问在这里

for(int i=w.st; i>=0;i--)

应该是for(int i=w.st - 1; i>=0; i--)。您应该再次检查数组上的所有迭代,并确保消除任何越界访问。

关于C++,加减多项式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com