목차
■ 문제개요
■ 문제분석 및 해결방법
■ 소스코드 및 주석
■ 실행화면
■ 느낀점
■ 문제분석 및 해결방법
■ 소스코드 및 주석
■ 실행화면
■ 느낀점
본문내용
;
p = song1.headnode();
p = song1.headnode2();
q = song2.headnode();
q = song2.headnode2();
while(1)
switch(x.Compare(p->exp, q->exp)) //지수비교
{
case '=':
if(p->exp == -1) //지수에아무것도업을때
return c;
else{
int sum = p->coef + q->coef; //지수합
if(sum){
temp.Init(sum, q->exp);
c.poly.Plusnode(temp);
}
p = song1.headnode2();
q = song2.headnode2();
}
break
case '<': //한쪽의지수가더클경우
temp.Init(q->coef, q->exp);
c.poly.Plusnode(temp);
q = song2.headnode2();
break
case '>': //다른쪽의지수가더클경우
temp.Init(p->coef, p->exp);
c.poly.Plusnode(temp);
p = song1.headnode2();
}
}
Link_poly operator*(const Link_poly& a, const Link_poly& b) //다항식의곱셈
{
Term *p, *q, temp;
poly_link song1(a.poly); //반복자
poly_link song2(b.poly);
Link_poly c;
p = song1.headnode();
p = song1.headnode2();
q = song2.headnode();
q = song2.headnode2();
for(; p->exp!=-1; p=song1.headnode2()) //헤드노드까지
{
for(; q->exp!=-1; q=song2.headnode2()) //두번째다항식의헤드노드까지
{
int Coef = p->coef * q->coef; //계수곱셈
int Exp = p->exp + q->exp; //지수덧셈
temp.Init(Coef, Exp);
c.poly.Plusnode(temp); //추가
}
q = song2.headnode();
q = song2.headnode2();
}
return c;
}
■ 실행화면
■ 느낀점
이번과제는 예전에 배열로 작성하였던 다항식을 연결리스트를 이용해 나타내는 과제였다. 처음 연결리스트를 배울때는 개념이해가 잘 되었으나, 막상 이를 실전에서 이용할려고 하니 많이 어려웠다. 책에 나와있는 코드를 3시간이 넘도록 분석을 하니 어느정도 감이 잡혔다. 다항식을 입력을 받는 것은 의외로 쉽게 할수 있었지만, 헤드노드를 이용해 다시 맨 앞으로 돌리는 부분에서 많이 헤매었다. 게다가 오버로딩 부분을 아직 100% 이해하는 것이 아니라서 그 부분에 많은 시간을 빼앗겼고, 다른 자료를 여럿 찾아본 뒤에야 구현할수 있었다. 코딩을 할 때 매번 느끼는 거지만, 수업시간에 이해하는것과 내가 직접 응용하는 것이 얼마나 어려운가를 새삼 깨달을수 있던 과제였다.
p = song1.headnode();
p = song1.headnode2();
q = song2.headnode();
q = song2.headnode2();
while(1)
switch(x.Compare(p->exp, q->exp)) //지수비교
{
case '=':
if(p->exp == -1) //지수에아무것도업을때
return c;
else{
int sum = p->coef + q->coef; //지수합
if(sum){
temp.Init(sum, q->exp);
c.poly.Plusnode(temp);
}
p = song1.headnode2();
q = song2.headnode2();
}
break
case '<': //한쪽의지수가더클경우
temp.Init(q->coef, q->exp);
c.poly.Plusnode(temp);
q = song2.headnode2();
break
case '>': //다른쪽의지수가더클경우
temp.Init(p->coef, p->exp);
c.poly.Plusnode(temp);
p = song1.headnode2();
}
}
Link_poly operator*(const Link_poly& a, const Link_poly& b) //다항식의곱셈
{
Term *p, *q, temp;
poly_link
poly_link
Link_poly c;
p = song1.headnode();
p = song1.headnode2();
q = song2.headnode();
q = song2.headnode2();
for(; p->exp!=-1; p=song1.headnode2()) //헤드노드까지
{
for(; q->exp!=-1; q=song2.headnode2()) //두번째다항식의헤드노드까지
{
int Coef = p->coef * q->coef; //계수곱셈
int Exp = p->exp + q->exp; //지수덧셈
temp.Init(Coef, Exp);
c.poly.Plusnode(temp); //추가
}
q = song2.headnode();
q = song2.headnode2();
}
return c;
}
■ 실행화면
■ 느낀점
이번과제는 예전에 배열로 작성하였던 다항식을 연결리스트를 이용해 나타내는 과제였다. 처음 연결리스트를 배울때는 개념이해가 잘 되었으나, 막상 이를 실전에서 이용할려고 하니 많이 어려웠다. 책에 나와있는 코드를 3시간이 넘도록 분석을 하니 어느정도 감이 잡혔다. 다항식을 입력을 받는 것은 의외로 쉽게 할수 있었지만, 헤드노드를 이용해 다시 맨 앞으로 돌리는 부분에서 많이 헤매었다. 게다가 오버로딩 부분을 아직 100% 이해하는 것이 아니라서 그 부분에 많은 시간을 빼앗겼고, 다른 자료를 여럿 찾아본 뒤에야 구현할수 있었다. 코딩을 할 때 매번 느끼는 거지만, 수업시간에 이해하는것과 내가 직접 응용하는 것이 얼마나 어려운가를 새삼 깨달을수 있던 과제였다.