Pagini recente » Cod sursa (job #41646) | Cod sursa (job #1058131) | Cod sursa (job #219780) | Cod sursa (job #168698) | Cod sursa (job #475932)
Cod sursa(job #475932)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 100010
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
char exp[M],s[M];
void solve()
{
char *cuv;
int st[M],vf=0;
cuv=strtok(s," ");
while(cuv)
{
if(cuv[0]>='0' && cuv[0]<='9') st[++vf]=atoi(cuv);
else if(cuv[0]=='+') {st[vf-1]=st[vf-1]+st[vf];
--vf;}
else if(cuv[0]=='-') {st[vf-1]=st[vf-1]-st[vf];
--vf;}
else if(cuv[0]=='*') {st[vf-1]=st[vf-1]*st[vf];
--vf;}
else if(cuv[0]=='/') {st[vf-1]=st[vf-1]/st[vf];
--vf;}
cuv=strtok(NULL," ");
}
fprintf(g,"%ld\n",st[1]);
fclose(g);
}
void rpn()
{
fgets(exp,M,f);
char v[M];
int q=-1,k=-1,i;
for(i=0;i<=strlen(exp)-1;++i)
if(exp[i]=='(') v[++k]=exp[i];
else if(exp[i]==')') {while(v[k]!='(')
{
s[++q]=' ';
s[++q]=v[k];
--k;
}
s[++q]=' ';
--k;}
else if(exp[i]>='0' && exp[i]<='9') s[++q]=exp[i];
else if(exp[i]=='+' || exp[i]=='-') { if(k==-1 || v[k]=='(') {v[++k]=exp[i];
s[++q]=' ';}
else if(v[k]=='+' || v[k]=='-') {s[++q]=' ';
s[++q]=v[k];
s[++q]=' ';
v[k]=exp[i];}
else if(v[k]=='*' || v[k]=='/') {if(k==0 || v[k-1]=='(') {s[++q]=' ';
s[++q]=v[k];
s[++q]=' ';
v[k]=exp[i];}
else if(v[k-1]=='+' || v[k-1]=='-') {s[++q]=' ';
s[++q]=v[k];
s[++q]=' ';
--k;
s[++q]=v[k];
s[++q]=' ';
v[k]=exp[i];}
}
}
else if(exp[i]=='*' || exp[i]=='/') {if(k==-1 || v[k]=='(') {v[++k]=exp[i];
s[++q]=' ';}
else if(v[k]=='+' || v[k]=='-') {v[++k]=exp[i];
s[++q]=' ';}
else if(v[k]=='*' || v[k]=='/') {s[++q]=' ';
s[++q]=v[k];
s[++q]=' ';
v[k]=exp[i];}
}
while(k!=-1)
{
s[++q]=' ';
s[++q]=v[k];
--k;
}
s[++q]=NULL;
fclose(f);
}
int main()
{
rpn();
solve();
return 0;
}