void CH02Test::testPolynomial(void) { Polynomial a; a.NewTerm(3, 2); a.NewTerm(2, 1); a.NewTerm(4, 0); TEST_ASSERT(a.Eval(1) == 9); TEST_ASSERT(a.Eval(2) == 20); Polynomial b; b.NewTerm(1, 4); b.NewTerm(10, 3); b.NewTerm(3, 2); TEST_ASSERT(b.Eval(1) == 14); TEST_ASSERT(b.Eval(2) == 108); Polynomial c; c = a + b; TEST_ASSERT(c.Eval(1) == 23); TEST_ASSERT(c.Eval(2) == 128); Polynomial d; d = b + a; TEST_ASSERT(d.Eval(1) == 23); TEST_ASSERT(d.Eval(2) == 128); }
Polynomial operator+(const Polynomial& p1, const Polynomial& p2) { Polynomial result; int p1Pos=0, p2Pos=0; while((p1Pos<p1.terms) && (p2Pos<p2.terms)) if(p1.termArray[p1Pos].exp == p2.termArray[p2Pos].exp) { float t = p1.termArray[p1Pos].coef + p2.termArray[p2Pos].coef; if(t) result.NewTerm(t,p1.termArray[p1Pos].exp); p1Pos++; p2Pos++; } else if(p1.termArray[p1Pos].exp < p2.termArray[p2Pos].exp) { result.NewTerm(p2.termArray[p2Pos].coef, p2.termArray[p2Pos].exp); p2Pos++; } else { result.NewTerm(p1.termArray[p1Pos].coef, p1.termArray[p1Pos].exp); p1Pos++; } for( ; p1Pos<p1.terms; p1Pos++) result.NewTerm(p1.termArray[p1Pos].coef, p1.termArray[p1Pos].exp); for( ; p2Pos<p2.terms; p2Pos++) result.NewTerm(p2.termArray[p2Pos].coef, p2.termArray[p2Pos].exp); return result; }