Wypisywanie i obliczanie wartości ONP. Problem przy obliczaniu
Ostatnio zmodyfikowano 2014-01-25 14:35
baca1616 Temat założony przez niniejszego użytkownika |
Wypisywanie i obliczanie wartości ONP. Problem przy obliczaniu » 2014-01-25 14:35:29 Otóż mam problem. Mam do oddania program zamieniający zwykłe działanie np 4+4= na ONP 4 4 + =. wczytuje i zamienia. Druga czesc tez działa jesli wpisze sie do drugiej petli recznie wartosc wyrazenia w postaci ONP. Ale tak to nie przekazuje zmienej el2 do drugiej petli czy cos i zawiesza sie. Dane trzeba wprowadzac po spacji 4 + 4 = . Ma ktos jakies pomysły jak przekazac do drugiej funkcji ? Odrazu mówie nie jestem jakims ekstra programista. Wiec wytłumaczyć najlepiej jak chłopu na miedzy. #include <iostream> #include <sstream> #include <cstring> #include <fstream>
using namespace std;
int main() { ostringstream ss; char stos[ 256 ]; int stos2[ 256 ]; char el[ 256 ]; int ws = 0, dl; do { cin >> el; if( el[ 0 ] >= '0' && el[ 0 ] <= '9' ) ss << el << " "; else switch( el[ 0 ] ) { case '+':; case '-': while( ws && stos[ ws - 1 ] != '(' ) ss << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '*':; case '/': while( ws && stos[ ws - 1 ] != '(' && stos[ ws - 1 ] != '+' && stos[ ws - 1 ] != '-' ) ss << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '^': while( ws && stos[ ws - 1 ] == '^' ) ss << stos[ --ws ] << " "; stos[ ws++ ] = el[ 0 ]; break; case '(': stos[ ws++ ] = '('; break; case ')': while( stos[ ws - 1 ] != '(' ) ss << stos[ --ws ] << " "; ws--; break; case '=': while( ws ) ss << stos[ --ws ] << " "; ss << "="; break; } } while( el[ 0 ] != '=' ); cout << ss.str().c_str(); cout << endl; string x; x = ss.str().c_str(); dl = x.length(); cout << "Dlugosc stringa: " << dl; char * el2 = new char[ dl ]; strcpy( el2, x.c_str() ); ws = 0; int a, b, w; do { if( el2[ 0 ] >= '0' && el2[ 0 ] <= '9' ) { a = b = 0; do a = 10 * a + el[ b++ ] - 48; while( el2[ b ] ); stos[ ws++ ] = a; } else if( el2[ 0 ] == '=' ) cout << stos[ --ws ] << endl; else { b = stos[ --ws ]; a = stos[ --ws ]; switch( el2[ 0 ] ) { case '+': w = a + b; break; case '-': w = a - b; break; case '*': w = a * b; break; case '/': w = a / b; break; case '^': w = 1; while( b-- ) w *= a; break; } stos[ ws++ ] = w; } } while( el2[ 0 ] != '=' ); return 0; } [/b] |
|
« 1 » |