Konwersja z ONP na zapis zwykly
Ostatnio zmodyfikowano 2017-04-23 12:42
cyynder Temat założony przez niniejszego użytkownika |
Konwersja z ONP na zapis zwykly » 2017-04-23 12:31:23 Witam serdecznie mam do zrobienia zadanie z informatyki w którym na podstawie kodu programu z konwersja na odwrotna notacje polska mam napisac program odwrotny. Tresc zadania: Napisz program, który wyrażenie zapisane w odwrotnej notacji polskiej zamieni na wyrażenie zapisane z nawiasami i działaniami, np. na wejściu mamy: 5 7 2 8 1 3 ^ * / + - na wyjściu mamy: (5-(7+(2/(8*(1^3))))) KOD porgramu wyglada nastepujaco: #include <iostream> #include <sstream> #include <vector> #include <cmath> using namespace std; vector < double > stos; void wypisz_stos(); double onp( string st ); int main() { string s = "5 7 2 8 1 3 ^ * / + -"; cout << "Wynik: " << onp( s ); return 0; }
void wypisz_stos() { for( int i = 0; i < stos.size(); i++ ) cout << " " << stos[ i ]; cout << endl; }
double onp( string st ) { istringstream iss; iss.str( st ); string ss; cout << "\n( element )\t( na/z stos, operacja )\t( zawartosc stosu )\n"; double val; while( iss >> ss ) { cout << ss << "\t\t"; if( istringstream( ss ) >> val ) { stos.push_back( val ); cout << "na\t\t\t\t"; } else { double c2 = stos.back(); stos.pop_back(); cout << "z "; double c1 = stos.back(); stos.pop_back(); cout << "z\t"; cout << c1 << ss << c2 << "\t\t\t"; if( ss == "+" ) stos.push_back( c1 + c2 ); if( ss == "*" ) stos.push_back( c1 * c2 ); if( ss == "-" ) stos.push_back( c1 - c2 ); if( ss == "/" ) stos.push_back( c1 / c2 ); if( ss == "^" ) stos.push_back( pow( c1, c2 ) ); } wypisz_stos(); } return stos.front(); } [ / i ] |
|
pekfos |
» 2017-04-23 12:42:37 A problem masz z..? Zamiast na liczbach, operuj na napisach. |
|
« 1 » |