Evo napisao sam program i radi na svim test primjerima koje sam mu zadao, iako ga nisam testirao na ni jednom ozbiljnijem izrazu...
Code:
/*
obrnuta poljska notacija
*/
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <stack>
using namespace std;
int main(void) {
stack <int> s;
ifstream ulaz("ulaz.txt");
char tmp[10];
memset(tmp,'\0',10);
while (ulaz>>tmp) {
if (strlen(tmp)==1 && (tmp[0]=='+' || tmp[0]=='-' || tmp[0]=='*' || tmp[0]=='/')) {
int rez=0,a,b;
switch(tmp[0]) {
case '+':
a=s.top();
s.pop();
rez=a+s.top();
s.pop();
break;
case '-':
a=s.top();
s.pop();
rez=a-s.top();
s.pop();
break;
case '*':
a=s.top();
s.pop();
rez=a*s.top();
s.pop();
break;
case '/':
a=s.top();
s.pop();
rez=a/s.top();
s.pop();
break;
}
s.push(rez);
}
else {
int t=atoi(tmp);
s.push(t);
}
}
cout << "Rezultat je: " << s.top() << endl;
ulaz.close();
return 0;
}
Moze to vjerovatno i bolje, ali nemam bas mnogo vremena da sad sređujem kod. U svakom slučaju koristi se samo jedan stack (ni ne vidim zašto bi trebalo koristiti 2) a program radi samo sa integerima - ako ti treba nešto drugo neće ti biti problem da prepraviš.
ps: kod je u C++, zaboravio sam da je ovo C forum. Samo promjeni ulaz/uzlaz i još par sitnica ako ti baš treba C.