예제 #1
0
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);
}
예제 #2
0
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;
}