다항식의 덧셈에 대해서 질문이요
아래에 /////ostream& operator<< (ostream& os, Polynomial& p) 부분을 어떻게 채워야 하나요?ㅠㅠ
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
class Polynomial;
class Term
{
friend class Polynomial;
friend ostream& operator<<(ostream&, Polynomial&);
friend istream& operator>>(istream&, Polynomial&);
private:
float coef; // coefficient
int exp; // exponent
};
class Polynomial
{
public:
Polynomial(); // construct a polynomial p(x) = 0.
Polynomial operator+(Polynomial&); // 다항식의 합을 반환
void NewTerm(const float, const int);
friend ostream& operator<<(ostream&, Polynomial&);
friend istream& operator>>(istream&, Polynomial&);
private:
Term *termArray;
int capacity; // 1로 초기화
int terms; // 저장된 항의 수로 0으로 초기화
};
#endif
==================================================================
#include
#include "polya.h"
using namespace std;
istream& operator>> (istream& is, Polynomial& p)
{
// #terms and (coefficoent, exponent)의 pair들을 읽어들인다.
// 높은차수의 항부터 저장되었다고 가정한다.
int noofterms; float coef; int exp;
is >> noofterms;
for (int i = 0; i < noofterms; i++)
{
is >> coef >> exp; // 계수와 지수 pair를 읽어들인다.
p.NewTerm(coef, exp);
}
return is;
}
ostream& operator<< (ostream& os, Polynomial& p)
{
//////////////////
////////////////// 이 부분을 어떻게 해야 하나요?
//////////////////////
return os;
}
Polynomial::Polynomial():capacity(4), terms(0)
{
termArray = new Term[capacity];
}
void Polynomial::NewTerm(const float theCoeff, const int theExp)
{
if(terms == capacity)
{
capacity *=2;
Term *temp = new Term[capacity]; // 새로운 배열
copy(termArray, termArray + terms, temp);
delete[] termArray; // 그전 메모리 반환
termArray = temp;
}
termArray[terms].coef=theCoeff;
termArray[terms++].exp=theExp;
}
Polynomial Polynomial::operator+(Polynomial& b)
{// *this와 b를 더한 결과를 반복한다.
Polynomial c;
int aPos = 0, bPos = 0;
while((aPos < terms) && (bPos < b.terms))
{
if(termArray[aPos].exp == b.termArray[bPos].exp){
float t = termArray[aPos].coef + b.termArray[bPos].coef;
if(t) c.NewTerm(t, termArray[aPos].exp);
aPos++; bPos++;
}
else if(termArray[aPos].exp < b.termArray[bPos].exp){
c.NewTerm(b.termArray[bPos].coef, b.termArray[bPos].exp);
bPos++;
}
else {
c.NewTerm(termArray[aPos].coef, termArray[aPos].exp);
aPos++;
}
}
// *this 의 나머지 항들을 추가한다.
for( ; aPos < terms; aPos++)
c.NewTerm(termArray[aPos].coef, termArray[aPos].exp);
//b(x)의 나머지 항들을 추가한다.
for(; bPos < b.terms; bPos++)
c.NewTerm(b.termArray[bPos].coef, b.termArray[bPos].exp);
return c;
}
댓글 달기