Pagini recente » Cod sursa (job #2547132) | Cod sursa (job #3003861) | Cod sursa (job #2966387) | Cod sursa (job #265357) | Cod sursa (job #2671988)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
stack <char> semne;
stack <int> numere;
void evaluare_operatie()
{
int a=numere.top();
numere.pop();
int b=numere.top();
numere.pop();
int semn=semne.top();
semne.pop();
switch(semn)
{
case '+':
numere.push(b+a);
break;
case '-':
numere.push(b-a);
break;
case '*':
numere.push(b*a);
break;
case '/':
numere.push(b/a);
break;
}
}
void evaluare_secventa()
{
while(!semne.empty()&&semne.top()!='(')
evaluare_operatie();
}
int prioritate(char op)
{
if(semne.empty())
return 0;
if(op=='+'||op=='-')
return 1; ///tre sa facem evaluare
if(semne.top()=='/'||semne.top()=='*')
return 1;
return 0;
}
void evaluare()
{
int lgs=strlen(s);
for(int i=0; i<lgs; i++)
{
if(s[i]=='(')
{
semne.push('(');
continue;
}
if(s[i]==')')
{
evaluare_secventa();
semne.pop(); ///pt ca ramasese (
continue;
}
if(isdigit(s[i]))
{
int nr=0;
while(isdigit(s[i]))
{
nr=nr*10+s[i]-'0';
i++;
}
i--;
numere.push(nr);
continue;
}
if(prioritate(s[i]))
evaluare_operatie();
semne.push(s[i]);
}
evaluare_secventa();
}
int main()
{
f.getline(s, 100005);
evaluare();
g<<numere.top();
return 0;
}