Program wykonujący obliczenia algorytmem Djikstry ( Odwrócona Notacja Polska)
Ostatnio zmodyfikowano 2015-11-10 14:13
Orzhov Temat założony przez niniejszego użytkownika |
Program wykonujący obliczenia algorytmem Djikstry ( Odwrócona Notacja Polska) » 2015-11-09 22:35:33 Witam serdecznie :) Próbuję napisać program, przeliczający podane w nawiasach wyrażenia. Dane wejściowe wyglądają przykładowo tak: ( 2 + ( 3 * 7 ) ) --> Koniecznie oddzielone spacjami i wszystko w nawiasach Program na odpowiednio podane wyrażenie posegregować na stosy wartości i operatorów i za każdym napotkanym nawiasem zamykającym w wyrażeniu pobrać dwie liczby ze stosu wartości, jeden operator, wykonać działanie i odłożyć wynik na stos wartości aż do ostatniego nawiasu (czyli po ludzku - obliczyć) Kod jaki udało mi sie napisać to: #include <iostream> #include <sstream> #include <vector> #include <string> #include <stack> using namespace std;
int main() { stack < int > liczby; stack < string > operatory; string wyrazenie; string token; getline( cin, wyrazenie ); stringstream tokens; tokens << wyrazenie; int liczbajeden; int liczbadwa; int liczbawynikowa; while( tokens >> token ) { if( token == "+" || token == "-" || token == "*" || token == "/" ) operatory.push( token ); else liczby.push( stoi( token ) ); if( token == ")" ) liczbajeden == liczby.top(); } cout << liczbajeden; return 0; }
Nie jest dokończony, ponieważ już na tym etapie po wpisaniu poprawnych danych wejściowych program zwyczajnie "crashuje". cout<<liczbajeden jest oczywiście tylko na test czy wszystko działa poprawnie. Wymaga jeszcze kilku linijek. Nie mam pojęcia co sprawia że program nie działa, dlatego z chęcią zapytałbym kogoś bardziej doświadczonego o radę (dodam że mam niezbyt duże doświadczenie z C++ używam Code::Blocks i kompilatora MINGW64) + Wiem że na tym etapie zmienne "liczbadwa" i "liczbawynikowa" są bezużyteczne, są w kodzie jedynie dlatego że będą wykorzystane później, jak uporam się z obecną niedogodnością) Z góry dziękuję za rady i pomoc :) |
|
darko202 |
» 2015-11-10 08:17:25 1. w if( token == ")" ) liczbajeden == liczby.top(); // <-- tu powinno być = a nie ==
2. sprawdziłem dla wyrażenia 2 + ( 4 + 5 ) - 3 i wykłada się gdy realizowana jest operacja operatory.push( token ); /// dla token = "(" który nie jest liczbą
brakuje obsługi "("
|
|
j23 |
» 2015-11-10 14:13:57 Koniecznie oddzielone spacjami i wszystko w nawiasach |
A to jakiś wymóg odgórny, czy sam sobie tak dla uproszczenia wymyśliłeś? |
|
« 1 » |