2013-03-03 12 views
0

我正在寫函數將2個多項式加在一起,其中2個多項式具有相同數量的最高度(所有項不需要輸入)的情況都可以正常工作,其中的兩個多邊形有不同程度的不工作,該功能在某種程度上存儲一些大的值作爲係數超載+運算符添加2個多項式C++

這是函數

// overload + 
Polynomial Polynomial::operator+(const Polynomial &right) 
{ 
    // get the highest exponent value for result 
    int highestExp = 0; 
    if (maxExp < right.maxExp) 
     highestExp = right.maxExp; 
    else if (maxExp >= right.maxExp) 
     highestExp = maxExp; 

    Polynomial res; 
    res.setPolynomial(highestExp); 

    for (int coeff=0; coeff < highestExp; coeff++) 
      res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff]; 

    return res; 
} 

例如, 案例1:最高EXPS相等

The first (original) polynomial is: 
- 4x^0 + x^1 + 4x^3 - 3x^4 
The second polynomial is: 
- x^0 - x^3 
The result polynomial is: 
- 5x^0 + x^1 + 3x^3 - 3x^4 

案例2:最高的指數是不相等的

The first (original) polynomial is: 
- 4x^0 + x^1 + 4x^3 - 3x^4 (highest exp = 4) 
The second polynomial is: 
- x^0 - x^3 (highest exp = 5) 
The result polynomial is: 
- 5x^0 + x^1 + 3x^3 - 3x^4 - 33686019x^5 (highest exp = 5) 

請幫助!

更新:多項式類

class Polynomial 
{ 
private: 
    int **poly; 
    int maxExp; 
    void createPolynomialArray(int); 
public: 
    Polynomial(); 
    Polynomial(int); // constructor 
    Polynomial(const Polynomial &); // copy constructor 
    ~Polynomial(); // destructor 

    // setter 
    void setCoefficient(int,int); 
    void setPolynomial(int); 

    // getters 
    int getTerm() const; 
    int getCoefficient(int,int) const; 

    // overloading operators 
    void operator=(const Polynomial &); // assignment 
    Polynomial operator+(const Polynomial &); // addition  
} 
+1

爲了加快這個問題,找到多項式類的實際定義可能會*奇蹟*。請將其包含在您的問題文章中。謝謝。 – WhozCraig 2013-03-03 04:33:57

+0

您可能正在讀取低階多項式中係數緩衝區的末尾。在循環中,一旦「coeff」大於較小多項式的階數,就應該停止從較小多項式的元素中讀取數據。 – Mankarse 2013-03-03 04:35:53

回答

1

我想你想

Polynomial Polynomial::operator+(const Polynomial &right) 
{ 
    Polynomial res; 
    if(maxExp < right.maxExp) 
    { 
     res.setPolynomial(right.maxExp); 
     int coeff = 0; 
     for (; coeff < maxExp; coeff++) 
       res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff]; 
     for (; coeff < right.maxExp; coeff++) 
       res.poly[0][coeff] = right.poly[0][coeff]; 
    } 
    else 
    { 
     res.setPolynomial(maxExp); 
     int coeff = 0; 
     for (; coeff < right.maxExp; coeff++) 
       res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff]; 
     for (; coeff < maxExp; coeff++) 
       res.poly[0][coeff] = poly[0][coeff]; 
    } 
    return res; 
} 

您正在閱讀過短多項式的結束。

+0

有用,謝謝 – Casper 2013-03-03 04:52:45

+0

沒問題,樂意幫忙。 – 2013-03-03 04:54:13

0

你似乎缺少界限在你的數組訪問檢查。你看到奇怪值的原因是在這種情況下,程序可能從未初始化的內存中讀取垃圾值。但這是未定義的行爲,所以任何事情都可能發生。像這樣的錯誤最糟糕的部分是,他們往往似乎工作正常。

此外,我推薦使用std::vector存儲係數,而不是原始指針。工作起來容易很多,而且容易出錯。

P.S.另一個挑剔的是,我建議圍繞if和for塊使用大括號。它使代碼被包含的更加清晰,並且降低了在不更新大括號的情況下無意中添加額外行的風險。或者天堂禁止,有人使用多線宏。但這是一個品味問題。