Odwrotna notacja polska
Ostatnio zmodyfikowano 2017-04-06 11:00
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: 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ść ;) |
|
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ę. |
|
« 1 » |