Pagini recente » Cod sursa (job #654568) | Cod sursa (job #1515979) | Cod sursa (job #63906) | Cod sursa (job #3124628) | Cod sursa (job #2855543)
#include <iostream>
#include <fstream>
#include <stack>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
stack <char> operanzi;
stack <int> operatori;
char sir[100001];
int main()
{
f>>sir;
int n=strlen(sir);
for(int i=0; i<n; i++)
{
if(isdigit(sir[i]))
{
int x=0;
while(isdigit(sir[i]) && i<n)
{
x=x*10+sir[i]-'0';
i++;
}
i--;
operatori.push(x);
}
else if(sir[i]==')')
{
if(operanzi.top()=='(') operanzi.pop();
else
{
while(operanzi.top()!='(')
{
int x=operatori.top();
operatori.pop();
int y=operatori.top();
operatori.pop();
char c=operanzi.top();
operanzi.pop();
if(c=='*') operatori.push(x*y);
else if(c=='-') operatori.push(y-x);
else if(c=='+') operatori.push(y+x);
else operatori.push(y/x);
}
operanzi.pop();
}
}
else if(operanzi.empty()) operanzi.push(sir[i]);
else if(sir[i]=='(') operanzi.push(sir[i]);
else
{
if(sir[i]=='*' || sir[i]=='/') operanzi.push(sir[i]);
else
{
while(!operanzi.empty() && (operanzi.top()=='*' || operanzi.top()=='/'))
{
int x=operatori.top();
operatori.pop();
int y=operatori.top();
operatori.pop();
char c=operanzi.top();
operanzi.pop();
if(c=='*') operatori.push(x*y);
else operatori.push(y/x);
}
operanzi.push(sir[i]);
}
}
}
while(!operanzi.empty())
{
if(operanzi.top()=='(') operanzi.pop();
else
{
int x=operatori.top();
operatori.pop();
int y=operatori.top();
operatori.pop();
char c=operanzi.top();
operanzi.pop();
if(c=='*') operatori.push(x*y);
else if(c=='-') operatori.push(y-x);
else if(c=='+') operatori.push(y+x);
else operatori.push(y/x);
}
}
g<<operatori.top();
}