ورود

View Full Version : سوال: مشکل در کامپایلر C++‎‎ _ GCC & VS2012



vakili722
پنج شنبه 23 آبان 1392, 13:50 عصر
سلام دوستان
بنده برنامه ای نوشتم که چند جمله ای را با لینک لیست پیاده سازی میکند, دو عمل جمع و ضرب را میتوان روی آن انجام داد, اما در هنگام کامپایل برنامه در ضرب به مشکل برخوردم و وقتی برنامه را تریس کردم متوجه چیز عجیبی شدم برنامه در حلقه for دوم پس از یک بار اجرا اعضای چند جمله ای اول را به دومی اضافه میکند و حلقه ادامه می یابد.
من این کد را روی دو کامپایلر GCC & VS 2012 امتحان کردم اما هر دو یک جواب دادند و آن هم اشتباه نمیدونم اشکال کار کجاست لطفا راهنمایی بفرمایید.
[CODE]
PolynomialNode & PolynomialNode::operator * (const PolynomialNode & b)
{
return *(new PolynomialNode((exp+b.exp), (coef*b.coef)));
}
PolynomialList & PolynomialList::operator * (const PolynomialList & b)
{
PolynomialList * result = new PolynomialList();
for (PolynomialNode * temp1 = First ; temp1 != NULL ; temp1 = temp1->link)
{
for (PolynomialNode * temp2 = b.First ; temp2 != NULL ; temp2 = temp2->link)
result->Insert(*temp1 * *temp2);
}
return *result;
}
void PolynomialList::Insert(PolynomialNode & node)
{
if (First == Last && First->IsEmpty())
First = Last = &node;
else
{
if(node.exp < Last->exp)
{
Last->link = &node;
Last = &node;
}
else if (node.exp > First->exp)
{
PolynomialNode * temp = &node;
temp->link = First;
First = temp;
}
else
{
PolynomialNode * temp1;
temp1 = First;
for (; temp1 != NULL ; temp1 = temp1->link)
{
if (temp1->exp == node.exp)
temp1->coef += node.coef;
else if (node.exp < temp1->exp && node.exp > temp1->link->exp)
{
node.link = temp1->link;
temp1->link = &node;
}
}
}
}
}[CODE]

vakili722
یک شنبه 26 آبان 1392, 13:11 عصر
ممنون فهمیدم مشکل کجا بود از این بود ........
void PolynomialList::Insert(PolynomialNode & node)
{
if (node.coef !=0 && (node.exp != 0 || node.coef != 0))
{
if (First == NULL && Last == NULL)
{
First = Last = &node;
}
else
{
if(node.exp < Last->exp)
{
Last->link = &node;
Last = &node;
}
else if (node.exp > First->exp)
{
node.link = First;
First = &node;
}
else
{
for (PolynomialNode * temp1 = First ; temp1 != NULL ; temp1 = temp1->link)
{
if (temp1->exp == node.exp)
temp1->coef += node.coef;
else if (node.exp < temp1->exp && node.exp > temp1->link->exp)
{
node.link = temp1->link;
temp1->link = &node;
}
}
}
}
}
}