Situatie
Se da o expresie aritmetica in forma poloneza prefixata. Expresia este formata din operatorii + – / * %, iar operanzii sunt litere mici.
Afisati expresia in forma normala (infixata) si in forma postfixata.
Exemplu:
expresie.in
-*bb**4ac
expresie.out
((b*b)-((4*a)*c))
bb*4a*c*-
Solutie
<code='c++'>#include <fstream> #include <cstring> using namespace std; ifstream fin("expresie.in"); ofstream fout("expresie.out"); char op[]="+-*/%"; struct nod { char info; nod *st; nod *dr; }; void read(nod* &r) { char x; fin>>x; if(strchr(op,x)==NULL) { r=new nod; r->info=x; r->st=NULL; r->dr=NULL; } else { r=new nod; r->info=x; read(r->st); read(r->dr); } } void SRD(nod *r) { if(strchr(op,r->info)) fout<<"("; if(r->st!=NULL) SRD(r->st); fout<<r->info; if(r->dr!=NULL) SRD(r->dr); if(strchr(op,r->info)) fout<<")"; } void SDR(nod *r) { if(r->st!=NULL) SDR(r->st); if(r->dr!=NULL) SDR(r->dr); fout<<r->info; } int main() { nod *r; read(r); SRD(r); fout<<endl; SDR(r); return 0; }</code='c++'>
Leave A Comment?