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

Program wykonujący obliczenia algorytmem Djikstry ( Odwrócona Notacja Polska)

Ostatnio zmodyfikowano 2015-11-10 14:13
Autor Wiadomość
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:
C/C++
#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 :)
P-139885
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 "("
P-139889
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ś?
P-139900
« 1 »
  Strona 1 z 1