Pagini recente » Cod sursa (job #2591172) | Cod sursa (job #858698) | Cod sursa (job #2669268) | Cod sursa (job #2672237) | Cod sursa (job #2110112)
#include <iostream>
#include <fstream>
#include <string.h>
#include <stack>
#include <queue>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char A[10000];
int nl,a,b;
queue <int>ex;
stack <char>semn;
stack <int>evaluare;
int prioritate(char c)
{
if(c=='+')
return 1;
if(c=='-')
return 1;
if(c=='*')
return 2;
if(c=='/')
return 2;
return 0;
}
int conv(char c)
{
if(c=='+')
return -1;
if(c=='-')
return -2;
if(c=='*')
return -3;
if(c=='/')
return -4;
return 0;
}
int nr(int &r)
{
int d=0;
while('0'<=A[r]&&A[r]<='9')
{
d=d*10+A[r]-'0';
r++;
}
return d;
}
int main()
{
fin>>A;
nl=strlen(A);
for(int i=0;i<nl;i++)
{
if('0'<=A[i]&&A[i]<='9')
ex.push(nr(i));
if(prioritate(A[i])>0)
{
while(!semn.empty()&&(prioritate(A[i])<=prioritate(semn.top())))
{
ex.push(conv(semn.top()));
semn.pop();
}
semn.push(A[i]);
}
}
while(!semn.empty())
{
ex.push(conv(semn.top()));
semn.pop();
}
while(!ex.empty())
{
if(ex.front()>=0)
{
evaluare.push(ex.front());
fout<<ex.front()<<" ";
ex.pop();
}
else
{
a=evaluare.top();
evaluare.pop();
b=evaluare.top();
evaluare.pop();
if(ex.front()==-1)
evaluare.push(b+a);
if(ex.front()==-2)
evaluare.push(b-a);
if(ex.front()==-3)
evaluare.push(b*a);
if(ex.front()==-4)
evaluare.push(b/a);
fout<<ex.front()<<" ";
ex.pop();
}
}
fout<<evaluare.top();
return 0;
}