2014-06-07 6 views
0

대괄호로 +, -, * 및/연산자를 지원하는 간단한 계산기를 만들려고했습니다. 예를 들어 ((2.1 - 5.6)*4)+(2.8+2/2.2)은 -10.29 여야합니다 ... 나는 이렇게 시도했지만 바지와 만 작동합니다. 사용자 입력에 대괄호가 포함되어 있는지 어떻게 처리해야할지 모르겠습니다. 여기브래킷이있는 간단한 계산기

float calc(void) 
{ 
    float x,y, parse; 
    char c; 

    int test = scanf("%f %c %f", &x,&c,&y); 
    if (test == 0){ // if '(' starts equation 
     parse = calc(); 
     } 

    else{ 
     if (c == '-'){ 
      return x - y; 
     } 
     else if (c == '/'){ 
      return x/y; 
     } 
     else if (c == '+'){ 
      return x + y; 
     } 
     else if (c == '*'){ 
      return x * y; 
     } 
    } 
} 
+0

당신은 두 가지 문제로이 휴식해야한다 : 자신의 내면의 내용을 찾아 그들을 쌍, 1) 모든 브래킷을 찾을 수; 2)이 내용을 평가하십시오. 재귀 적 코드가됩니다. 자세히 설명하는 범위는 StackOverflow의 범위를 벗어납니다. – Floris

+2

http://en.wikipedia.org/wiki/Shunting-yard_algorithm –

+0

또는 심지어 http://stackoverflow.com/questions/4582398/writing-a-simple-equation-parser – Floris

답변

2

당신이 알고리즘이 있습니다 http://en.wikipedia.org/wiki/Shunting-yard_algorithm

당신이 방법에 의해 중위 표기법이라고 사용하고 있습니다. 알고리즘이하는 것처럼 보이는 것은 이것을 후위 표기법 (postfix notation)으로 변환하는 것입니다 (이것은 스택이 필요하기 때문에 계산하기가 훨씬 쉽습니다). 또한

, 그냥 호기심에 대한 오래된 계산기 사용 후위 표기법, 당신이 쓰기 때문에, 3 + 5를 계산하기 위해 (그리고 여전히 사용 솜 프로그래밍 언어에있다) 3 5 +

1

당신은 방정식을 해결할 수 이 간단한 방식으로 대괄호로 복잡합니다. 따라야하는 알고리즘이 있습니다. 일부 계산기에서 사용되는 계산기 중 하나는 반전 된 폴란드어 표기이며 방정식을 특정 형식으로 변환 한 다음 스택을 사용하여 푸시 및 팝핑을 시작하여 우선 순위를 고려하여 계산을 수행합니다.

Link to Reverse Polish Notation

+0

@ amir을 계산하십시오 .- 여기에 대한 설명과 실용적인 설명이 있습니다. myside의 upvote. –

+0

@shekharsuman 감사 – CMPS