Pagini recente » Cod sursa (job #148219) | Cod sursa (job #2549215) | Cod sursa (job #2984003) | Cod sursa (job #2340572) | Cod sursa (job #2710721)
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
int lgs, poz;
stack <char> semne;
stack <int> numere;
void evaluare_operatie()
{
int semn=semne.top(), nr2=numere.top();
numere.pop();
semne.pop();
int nr1=numere.top();
numere.pop();
switch(semn)
{
case '+':
{
numere.push(nr1+nr2);
break;
}
case '-':
{
numere.push(nr1-nr2);
break;
}
case '*':
{
numere.push(nr1*nr2);
break;
}
case '/':
{
numere.push(nr1/nr2);
break;
}
}
}
bool posibilitate(char pus, char vrem_punem)
{
if(pus=='(')
return 1;///se poate
if(pus=='+'||pus=='-')
if(vrem_punem=='*'||vrem_punem=='/')
return 1;
return 0;
}
void transf_in_nr()
{
int nr=0;
while(isdigit(s[poz]))
{
nr=nr*10+(s[poz]-'0');
poz++;
}
numere.push(nr);
}
void evaluare()
{
while(poz<lgs)
{
switch(s[poz])
{
case '(':
{
semne.push('(');
poz++;
break;
}
case ')':
{
while(semne.top()!='(')
evaluare_operatie();
semne.pop();
poz++;
break;
}
case '+':
case '-':
case '*':
case '/':
{
while(!semne.empty()&&posibilitate(semne.top(), s[poz])==0)
evaluare_operatie();
semne.push(s[poz]);
poz++;
break;
}
default:
transf_in_nr();
}
}
while(!semne.empty())
{
evaluare_operatie();
}
}
int main()
{
f.getline(s, 100005);
lgs=strlen(s);
evaluare();
g<<numere.top();
return 0;
}