Pagini recente » Cod sursa (job #2624262) | Cod sursa (job #592815) | Cod sursa (job #479315) | Cod sursa (job #37818) | Cod sursa (job #1525646)
#include <fstream>
#include <cstring>
using namespace std;
char e[100000],p[200000],op[]="+-*/";
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i,lg,lgp;
void TransformExpresie();
void TransformFactor();
void TransformTermen();
long rez()
{
int st[100000],j=0,k=0,S=0,a,b;
char c;
while (j<lgp)
{
c=p[j];
if (isdigit(c)) {
st[k]*=10;
st[k]+=c-'0';
}
if (c==' ') {k++;st[k]=0;}
if (strchr(op,c)) {
a=st[k-1];
b=st[k-2];S=0;
if (c=='+') S+=a+b;
if (c=='-') S+=b-a;
if (c=='*') S+=a*b;
if (c=='/') if (b>0) S+=b/a;
else S+=(b/a)-1;
st[k-1]=0;
k-=2;
st[k]=S;
}
j++;
}
return st[0];
}
int main()
{
fin.getline(e,200);
lg=strlen(e);
TransformExpresie();
fout<<rez();
}
void TransformFactor()
{if (e[i]=='(') {i++;
TransformExpresie();
i++;
}
else {
while (isdigit(e[i])) {
p[lgp++]=e[i];
i++;
}
p[lgp++]=' ';
}
}
void TransformTermen()
{
TransformFactor();
while (i<lg && (e[i]=='*' || e[i]=='/'))
{
i++;char c=e[i-1];
TransformFactor();
p[lgp++]=c;
p[lgp++]=' ';
}
}
void TransformExpresie()
{TransformTermen();
while (i<lg && (e[i] == '+' || e[i]=='-'))
{
i++;char c=e[i-1];
TransformTermen();
p[lgp++]=c;
p[lgp++]=' ';
}
}