Pagini recente » Cod sursa (job #2108276) | Cod sursa (job #1599661) | Cod sursa (job #2067778) | Cod sursa (job #1740431) | Cod sursa (job #1050959)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100001], a[100001];
int b[100001], vf1, vf2, nr, ok, i, pr[256], n;
void calcul()
{
char ch;
int rez;
ch=a[vf1];
switch(ch)
{
case '+': rez=b[vf2-1]+b[vf2]; break;
case '-': rez=b[vf2-1]-b[vf2]; break;
case '*': rez=b[vf2-1]*b[vf2]; break;
case '/': rez=b[vf2-1]/b[vf2]; break;
}
vf1--;
vf2--;
b[vf2]=rez;
}
int main()
{
f>>s;
n=strlen(s);
pr['(']=1;
pr['+']=pr['-']=2;
pr['*']=pr['/']=3;
for(i=0; i<n; i++)
{
if(s[i]=='(')
{
vf1++;
a[vf1]='(';
}
else
{
if(s[i]==')')
{
if(ok==1)
{
vf2++;
b[vf2]=nr;
nr=0;ok=0;
}
while(a[vf1]!='(')
calcul();
vf1--;//elimin paranteza deschisa
}
else
if(s[i]>='0' && s[i]<='9')
{
ok=1;
nr=nr*10 + s[i] - '0';
}
else // am operator +-*/
{
if(ok==1)
{
vf2++;
b[vf2]=nr;
nr=0;ok=0;
}
while(vf1>0&&pr[s[i]]<=pr[a[vf1]]){
calcul();
}
vf1++;a[vf1]=s[i];
}
}
}
if(ok==1)
{
vf2++;
b[vf2]=nr;
}
while(vf1>0)
calcul();
g<<b[1];
return 0;
}