목차
■ 문제개요
■ 문제분석 및 해결방법
■ 소스코드 및 주석
■ 실행화면
■ 느낀점
■ 문제분석 및 해결방법
■ 소스코드 및 주석
■ 실행화면
■ 느낀점
본문내용
& (postfix[i] <= 57)) stack.Add_member(t); // 스택에삽입
else // 오른쪽왼쪽자식순으로설정
{
t->right_child = stack.Delete_member();
t->left_child = stack.Delete_member();
stack.Add_memberm(t); // 자식이결정된노드를스택에삽입
}
}
return stack.Delete_Item();
}
void print_Infix(node *t)// 중위식출력
{
if(t){
print_Infix(t->left_child);
cout<data;
print_Infix(t->right_child);
}
}
void Stack::cal_post(char *post)// 후위식계산
{
Stack stack; // int형의스택을생성
int op1, op2, result;
int i = 0;
for(int x = post[i]; x != '#' x = post[i]) // 식을다읽을때까지for문수행
{
if((x >= 48) && (x <= 57)) stack.Add_member(x - 48); // 피연산자는스택에삽입
else{
op2 = stack.Delete_member();
op1 = stack.Delete_member();
switch(x)// 연산수행
{
case '+':
result = op1 + op2; break // 덧셈
case '-':
result = op1 - op2; break // 뺄셈
case '*':
result = op1 * op2; break // 곱셈
case '/':
result = op1 / op2; break // 나누셈
}
stack.Add_member(result); // 연산결과
i++;
}
result = stack.Delete_member(); // 삭제후result에저장
cout<
}
■ 실행화면
■ 느낀점
이번과제는 Inorder 방식으로 트리를 구성하여 사칙연산을 계산하는 것이었다. 처음에는 간단하게 생각했다가 스택을 이용하여 프로그램으로 나타낼려고 자료를 찾아보니 모두 지난번에 했던 과제들과 연관되어 있었다. 스택에 저장하는것에서부터 일단 저장하면 출력값이 후위식으로 변환되어야 한다는게 모두 이전의 과제들과 연관되어 있었다. 때문에 이를 응용하는데 많은 애를 먹었고, 이를 해결하기 위해 인터넷에서 여러 자료를 찾아 보았으나 마땅한 해결방법이 없었다. 일단 프로그램을 실행시키기는 했으나, 아직 많이 부족한 프로그램이다.
처음 교수님이 수업시간에 이번과제는 쉽다고 하셨는데 나에게는 그렇지가 않았다. 항상 느끼는 거지만 수업시간에 배운 이론과 이를 실전에 쓸수있도록하는 과제는 많은 차이가 있다. 이론적으로는 쉽게 이해하고 다가갈수 있지만, 이를 직접 프로그램으로 나타내려고 하니 많은 어려움이 있다. 특히나 코딩하는데 있어 에러가 날 경우 대처하는 부분이 많이 미흡해 앞으로도 많은 어려움이 예산된다. .
else // 오른쪽왼쪽자식순으로설정
{
t->right_child = stack.Delete_member();
t->left_child = stack.Delete_member();
stack.Add_memberm(t); // 자식이결정된노드를스택에삽입
}
}
return stack.Delete_Item();
}
void print_Infix(node *t)// 중위식출력
{
if(t){
print_Infix(t->left_child);
cout<
print_Infix(t->right_child);
}
}
void Stack::cal_post(char *post)// 후위식계산
{
Stack
int op1, op2, result;
int i = 0;
for(int x = post[i]; x != '#' x = post[i]) // 식을다읽을때까지for문수행
{
if((x >= 48) && (x <= 57)) stack.Add_member(x - 48); // 피연산자는스택에삽입
else{
op2 = stack.Delete_member();
op1 = stack.Delete_member();
switch(x)// 연산수행
{
case '+':
result = op1 + op2; break // 덧셈
case '-':
result = op1 - op2; break // 뺄셈
case '*':
result = op1 * op2; break // 곱셈
case '/':
result = op1 / op2; break // 나누셈
}
stack.Add_member(result); // 연산결과
i++;
}
result = stack.Delete_member(); // 삭제후result에저장
cout<
■ 실행화면
■ 느낀점
이번과제는 Inorder 방식으로 트리를 구성하여 사칙연산을 계산하는 것이었다. 처음에는 간단하게 생각했다가 스택을 이용하여 프로그램으로 나타낼려고 자료를 찾아보니 모두 지난번에 했던 과제들과 연관되어 있었다. 스택에 저장하는것에서부터 일단 저장하면 출력값이 후위식으로 변환되어야 한다는게 모두 이전의 과제들과 연관되어 있었다. 때문에 이를 응용하는데 많은 애를 먹었고, 이를 해결하기 위해 인터넷에서 여러 자료를 찾아 보았으나 마땅한 해결방법이 없었다. 일단 프로그램을 실행시키기는 했으나, 아직 많이 부족한 프로그램이다.
처음 교수님이 수업시간에 이번과제는 쉽다고 하셨는데 나에게는 그렇지가 않았다. 항상 느끼는 거지만 수업시간에 배운 이론과 이를 실전에 쓸수있도록하는 과제는 많은 차이가 있다. 이론적으로는 쉽게 이해하고 다가갈수 있지만, 이를 직접 프로그램으로 나타내려고 하니 많은 어려움이 있다. 특히나 코딩하는데 있어 에러가 날 경우 대처하는 부분이 많이 미흡해 앞으로도 많은 어려움이 예산된다. .