2014-05-05 1 views
0

У меня есть итоговый экзамен завтра в LAB-структурах данных!Postfix Оценочный код Использование Stack

У меня проблема при запуске этого кода! Этот код оценивает постфиксное выражение. Это так просто ... но я не знаю, почему, когда я запускаю его и пытаюсь разделить, например: 6/2. он печатает 2 вместо 3!

+ + - и * все правильно, но проблема с делением! Как вы думаете, проблема с библиотекой в ​​моем компиляторе!

Я использую Code :: Blocks и Visual C++.

Не могли бы вы помочь мне с этим! :(


Кодекс:

#include<iostream> 
using namespace std; 
#include<math.h> 
#include<conio.h> 
#define stacksize 6 
struct stacktype{ 
    float data[stacksize]; 
    int top; 
}; 

void push(stacktype*s, float d){ 
    if (s->top < 6) { 
    s->data[s->top]=d; 
    s->top++; 
    } 
} 

float pop(stacktype*s){ 
    if (s->top != 0){ 
    s->top--; 
    return s->data[s->top]; 
    } 
    return 0; 
} 

float oper(char symbol, float op1, float op2){ 
    switch (symbol){ 
    case '+': return (op1+op2);break; 
    case '-':return (op1-op2);break; 
    case '*':return (op1*op2);break; 
    case '/':return (op1/op2);break; 
    default: cout<<"illegal operation.......\n"; 
} 

    return 0; 
} 

int main() { 
    float op1,op2,symb,value; 
    char symbol; 
    stacktype *s; 
    s= new stacktype; 
    s->top=0; 
    cout<<"Enter The Postfix Expression To Evaluate:: \n\n"; 
    cin>>symbol; 
    while (symbol != '.') { 
    if (symbol == '+' || symbol == '-' || symbol == '*' || symbol == '/'){ 
    op2=pop(s); 
    op1=pop(s); 
    value=oper(symbol,op1,op2); 
    push(s,value); 
} 
else { 
    if (symbol == '0') symb =0 ; 
    else if (symbol == '1') symb = 1; 
    else if (symbol == '2') symb =2 ; 
    else if (symbol == '3') symb =3 ; 
    else if (symbol == '4') symb = 4; 
    else if (symbol == '5') symb =5 ; 
    else if (symbol == '6') symb =6 ; 
    else if (symbol == '7') symb =7; 
    else if (symbol == '8') symb =8 ; 
    else if (symbol == '9') symb =9 ; 

    push(s,symb); 
    } 
    cin>>symbol; 
} 
value=pop(s); 
cout<<"The Value:: \n"<<value<<endl; 
return 0; 
} 
+0

Почему вы используете 'break' после' return' statement? – Rakib

+0

Вы вводите первый операнд (т. е. «/ 6 2.»), вы должны ввести последний операнд (т. е. «6 2 /.») – 101010

+0

это просто синтаксис коммутатора! – Mariah

ответ

1

Ваш код дает правильный результат для меня:

6 
2 
/
. 
The Value:: 
3 

Обратите внимание, что у Вас есть инвертирование польской нотации, т.е. операнд должен следовать за значения для работы.

+0

Да, это работает, когда я кладу оператор после двух операндов. Я забыл, что это выражение POSTFIX. – Mariah

+0

, пожалуйста, примите ответ, чтобы отметить вопрос. –