Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odwrotna notacja polska

Ostatnio zmodyfikowano 2017-04-06 11:00
Autor Wiadomość
witcher98
Temat założony przez niniejszego użytkownika
Odwrotna notacja polska
» 2017-04-05 22:30:06
Witam. Mam  problem z napisaniem programu który oblicza wartość działania wprowadzonego w ww. notacji. Przykładowo zapis: 44+3* jest równy 24. Poniżej kod:
C/C++
int main()
{
    stack < int > stos;
    int a, temp1, temp2;
    cout << "wprowadz dzialanie w odwrotnej notacji polskiej: " << endl;
    while( a != '=' )
    {
        if( cout <<( cin >> a ) == 0 )
        {
            temp1 = stos.top();
            stos.pop();
            temp2 = stos.top();
            stos.pop();
            if( a == '*' ) stos.push( temp1 * temp2 );
           
            if( a == '+' ) stos.push( temp1 + temp2 );
           
            if( a == '-' ) stos.push( temp1 - temp2 );
           
            if( a == '/' ) stos.push( temp1 / temp2 );
           
        }
        else
        {
            stos.push( a );
        }
    }
    cout << stos.top();
    return 0;
}

Użyłem do tego zadania stosu. Pobieram każdy element działania osobno, następnie sprawdzam czy dany element jest liczbą (jeżeli nie jest, wyświetlone zostanie 0 i wykonana zostanie jedna z operacji np. dodawanie). Jeśli jest to liczba, to umieszcza ją na szczycie stosu. Największy problem mam gdy wprowadzam znak np +. Wtedy program zaczyna wypisywać zera w nieskończoność, nie mam pojęcia dlaczego tak się dzieje. Z góry dzięki za odpowiedzi i proszę o wyrozumiałość ;)
P-159842
j23
» 2017-04-06 11:00:56
Błąd leży w tym, że próbujesz czytać znaki (+-/*) operatorem >> dla liczb typu int. Po takiej próbie strumień przechodzi w stan fail i masz niekończącą się pętle.

Przeczytaj całe wyrażenie do stringa i analizuj znak po znaku, użyj strtol do konwersji na liczbę.
P-159868
« 1 »
  Strona 1 z 1