Pagini recente » Cod sursa (job #1063886) | Cod sursa (job #653500) | Cod sursa (job #2574583) | Cod sursa (job #834982) | Cod sursa (job #2863498)
#include <fstream>
#include <stack>
#include<string>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
stack<int>nr;
stack<char>op;
string str;
int number(int &i)
{
int formed_number=0;
while(i<str.size() and str[i]>='0' and str[i]<='9')
{
formed_number=formed_number*10+str[i]-'0';
i++;
}
i--;
return formed_number;
}
int operation1(int val1, int val2, char op)
{
if(op=='+')
return val1+val2;
else if(op=='-')
return val1-val2;
else if(op=='*')
return val1*val2;
else if(op=='/')
return val1/val2;
}
int grad(char op)
{
if(op=='+' or op=='-')
return 1;
else if(op=='*' or op=='/')
return 2;
return 0;
}
int main()
{
getline(cin,str);
for(int i=0;i<str.size();i++)
{
if(str[i]=='(')
{
op.push(str[i]);
}
else if(str[i]>='0' and str[i]<='9')
{
nr.push(number(i));
}
else if(str[i]==')')
{
while(op.size()>0 and op.top()!='(')
{
int val2=nr.top();
nr.pop();
int val1=nr.top();
nr.pop();
char operator1=op.top();
op.pop();
nr.push(operation1(val1,val2,operator1));
}
if(op.size()>0)
op.pop();
}
else
{
while(op.size()>0 and grad(str[i])<=grad(op.top()))
{
int val2=nr.top();
nr.pop();
int val1=nr.top();
nr.pop();
char operator1=op.top();
op.pop();
nr.push(operation1(val1,val2,operator1));
}
op.push(str[i]);
}
}
while(op.size()>0)
{
int val2=nr.top();
nr.pop();
int val1=nr.top();
nr.pop();
char operator1=op.top();
op.pop();
nr.push(operation1(val1,val2,operator1));
}
cout<<nr.top();
return 0;
}