티스토리 뷰

수식의 표현 - 수식의 계산

연산자의 계산순서를 생각해야 함


A+B*C+D

 ⇨ ((A+(B*C))+D)



수식의 표현 - 수식의 표기 방법

중위 표기법(infix notation): 연산자를 피연산자 사이에 표기하는 방법

 ⇨ A+B

전위 표기법(prefix notation): 연산자를 피연산자 앞에 표기하는 방법

 ⇨ +AB

후위 표기법(postfix notation): 연산자를 피연산자의 뒤에 표기하는 방법

 ⇨ AB+



수식의 표현 - 전위 표기법

(A - ( ( B+K ) / D ))


A + B => +AB


(A - (( B+K )/D))

 ⇨ (A - ( (+BK) / D ) )

  ⇨ A - ( / (+BK) D )
   ⇨ - A (/(+BK)D)



수식의 표현 - 후위 표기법

(A - ( ( B+K ) / D ))


A + B => AB+


(A - ( ( B+K ) /D))

 ⇨ (A - ( ( B K + ) / D ) )

  ⇨ A - ( (BK+) D / )

   ⇨ A ((BK+)D/) -



수식의 표현 - 중위 표기식의 후위 표기식 변환 방법

먼저 중위 표기식을 연산자의 우선순위를 고려하여 (피연산자, 연산자, 피연산자)의 형태로 괄호로 묶어줌

각 계산뭉치를 묶고 있는 괄호 안에서 연산자를 계산뭉치의 가장 오른쪽으로 이동 시킴

각 계산뭉치를 하나의 피연산자로 고려하여 위를 반복함

괄호를 모두 제거함



수식의 표현 - 후위 표기법

(A - ( ( B+K ) / D ))


A + B => AB+


(A - ( ( B+K ) /D))

 ⇨ (A - ( ( B K + ) / D ) )

  ⇨ A - ( (BK+) D / )

   ⇨ A ((BK+)D/) -



수식의 표현 - 중위 표기식의 후위 표기식 변환 방법

( ( A - ( B / C ) ) - ( D * E ) )

  │ │↑ ↑  │  │↑ ↑

  │ └┘│  │  └┘│

  └───┘  └───┘


( ( A ( B C / ) - ) ( D E * ) - )




수식의 표현 - 후위 표기식의 계산 알고리즘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 후위 표기식(369*+)을 계산하는 연산
element evalPostfix(char *exp) {
    int oper1, oper2, value, i=0;
    int length = strlen(exp);
    char symbol;
    top = -1;
 
    for(i=0; i<length; i++) {
        symbol = exp[i];
 
        if(symbol != ‘+’ && symbol != ‘-’ && symbol != ‘*’ && symbol != ‘/’) {
            value = symbol - ‘0’;
            push(value);
        }
        else {
            oper2 = pop( ); oper1 = pop( );
 
            switch(symbol) {
                case ‘+’ :
                    push(oper1 + oper2);
                    break;
 
                case ‘-’ :
                    push(oper1 - oper2);
                    break;
 
                case ‘*’ :
                    push(oper1 * oper2);
                    break;
 
                case ‘/’ :
                    push(oper1 / oper2);
                    break;
            }
        }
    }
    return pop( );
}
cs



수식의 표현 - 수식이 저장된 배열과 스택의 초기 모습

 



수식의 표현

 




 


 



수식의 표현 - exp[5]의 위치를 가리키는 i 변수의 모습

 



수직의 표현 - pop(57) 결과

 



공지사항
최근에 올라온 글
Total
Today
Yesterday