산술식 (A*(B-C)/(D**2))-E의 수식을 후위표기법 과정을 이용하여 기술하라

2006. 9. 12. 14:20

후위 표기법이란 피연산자들이 앞에 오고 연산자가 뒤에 오는 형식입니다. '1 + 1'은 '1 1 +'로 표기되는 식이지요. 우리가 일반적으로 쓰는 중위 표기법과 달리 ()가 없이 우선순위를 쉽게 파악할 수 있다는 장점이 있습니다. 연산자가 오면 바로 앞의 결과 두 개를 연산하면 되기 때문입니다.

위의 예를 후위 표기법으로 바꿔본다면, 우선 제일 우선순위가 높은 연산은 B-C와 D**2가 되겠지요. 이것들은 각각 'B C -'와 'D 2 **'가 될겁니다.
다음은 첫번째 식과 A의 곱인데 이는 마찬가지로 'B C -'를 하나의 피연산자로 보고 표기해주면 됩니다. 즉 다시 말하면 가장 우선순위가 높은 식부터 처리해주고 또 그 식이 하나의 피연산자가 되는 식입니다.

결과는 다음과 같습니다.

A B C - * D 2 ** / E -

후위 표기법은 대개 스택으로 처리하는데 처리하는 과정을 약간 보자면요...
일단 순서대로 A, B, C가 들어올 거고... 다음에 -가 들어오면 B와 C의 뺄셈을 수행합니다. 이 결과를 A'라고 한다면 현재까지 처리한 결과는 (A A')가 될거고 다음에는 *가 들어올 차례가 되지요?
그러면 A와 아까의 결과인 A'를 또 곱셈을 해 주고 이 결과인 B'를 남겨둡니다. 이어서 D와 2가 들어올테니 (B' D 2)가 되고 **가 들어오면 바로 앞의 두 항인 D에 2제곱을 해주면 될거고요... 결과인 C'를 저장해 놓습니다.
(B' C')가 있는 상태에서 이제 /가 들어오고 마찬가지로 나눗셈을 처리하고 나면 E와 -이 들어올테니 처리하면 됩니다.

조금 설명이 복잡해 보이는 것 같긴 한데 원칙은 간단합니다. '연산자가 들어오면 가장 최근의 두 항을 연산하여 하나의 항으로 만들어 놓는다'입니다. 중위 표기를 후위 표기로 바꾸는 것은 우선 순위가 높은 식부터 연산자를 뒤로 빼면서 위에서 설명한 것과 같이 처리하면 되구요.

'테크노트 > 기타' 카테고리의 다른 글

Grub 삭제하는 방법  (0) 2006.09.28
MFC 계산기 예제 소스  (0) 2006.09.23
Standard C++ Library : <ios> Members  (0) 2006.09.23
infix to postfix [소스]  (0) 2006.09.16
infix -> postfix  (0) 2006.09.15

밥짓는아이 테크노트/기타