Pagini recente » Cod sursa (job #2522473) | Cod sursa (job #1973732) | Cod sursa (job #2030469) | Cod sursa (job #1724539) | Cod sursa (job #2449469)
#include<iostream>
#include<fstream>
#include<stack>
#include<cstring>
using namespace std;
int precedence(char a)
{
if(a=='+' || a=='-')
return 1;
if(a=='*' || a=='/')
return 2;
return 0;
}
int aplica(int a ,int b,char ch)
{
if(ch=='+') return a+b;
if(ch=='-') return a-b;
if(ch=='*') return a*b;
if(ch=='/') return a/b;
}
int evaluare(char token[])
{
stack<int> values;
stack<char> operators;
for(int i=0;i<strlen(token);i++)
{
if(token[i]==' ')
continue;
if(isdigit(token[i]))
{
int val=0;
while(i<strlen(token) && isdigit(token[i]))
{
val=val*10+(token[i]-'0');
i++;
}
i--;
values.push(val);
}
else
if(token[i]=='(')
operators.push(token[i]);
else
if(token[i]==')')
{
while(!operators.empty() && operators.top()!='(')
{
int val1,val2;
val2=values.top();
values.pop();
val1=values.top();
values.pop();
char op=operators.top();
operators.pop();
values.push(aplica(val1,val2,op));
}
operators.pop();
}
else //operator
{
while(!operators.empty() && precedence(operators.top())>=precedence(token[i]) )
{
int val1,val2;
val2=values.top();
values.pop();
val1=values.top();
values.pop();
values.push(aplica(val1,val2,operators.top()));
operators.pop();
//cout<<values.top()<<' ';
}
operators.push(token[i]);
}
}
while(!operators.empty())
{
int val1,val2;
val2=values.top();
values.pop();
val1=values.top();
values.pop();
values.push(aplica(val1,val2,operators.top()));
operators.pop();
}
return values.top();
}
int main()
{
ifstream fin("evaluare.in");
char E[100000];
fin.getline(E,100000);
ofstream fout("evaluare.out");
fout<<evaluare(E);
fin.close();
fout.close();
}