Pagini recente » Cod sursa (job #2372620) | Cod sursa (job #977827) | Cod sursa (job #1857326) | Cod sursa (job #2385929) | Cod sursa (job #2998886)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char expresie[100002];
stack<int> nr;
stack<char> op;
int prioritate(char opr)
{
if(opr=='+' || opr=='-')
{
return 1;
}
else if(opr=='*' || opr=='/')
{
return 2;
}
return 0;
}
int operatii(int nr1, int nr2, int opr)
{
if(opr=='+')
{
return nr1+nr2;
}
if(opr=='-')
{
return nr1-nr2;
}
if(opr=='*')
{
return nr1*nr2;
}
if(opr=='/')
{
return nr1/nr2;
}
}
void solveopr()
{
int nr1=nr.top();
nr.pop();
int nr2=nr.top();
nr.pop();
char opr = op.top();
op.pop();
int res=operatii(nr1,nr2,opr);
nr.push(res);
}
void solveparanteze()
{
while(op.top()!='(')
{
solveopr();
}
op.pop();
}
int main()
{
f >> expresie;
int len=strlen(expresie);
expresie[len]=')';
expresie[len+1]=NULL;
op.push('(');
for(int i=0;i<=len;i++)
{
if(expresie[i]=='(')
{
op.push(expresie[i]);
}
else if(expresie[i]==')')
{
solveparanteze();
}
else if(expresie[i]>='0' && expresie[i]<='9')
{
if(i>0 && expresie[i-1]>='0' && expresie[i-1]<='9')
{
int st=nr.top();
nr.pop();
int numar = st*10+(expresie[i]-'0');
nr.push(numar);
}
else
{
nr.push(expresie[i]-'0');
}
}
else
{
while(prioritate(expresie[i])<=prioritate(op.top()))
{
solveopr();
}
op.push(expresie[i]);
}
}
g << nr.top();
return 0;
}