Pagini recente » Cod sursa (job #1046376) | Cod sursa (job #2563337) | Cod sursa (job #1832634) | Cod sursa (job #66775) | Cod sursa (job #579813)
Cod sursa(job #579813)
#include<stdio.h>
#include<string.h>
FILE*fin,*fout;
char v[100001],ch,st[50001];
int op[50001],i,j,l,pr[256],k,d,nr;
void calcul(){
int rez;
switch(st[d]){
case '+':rez=op[k-1]+op[k];break;
case '-':rez=op[k-1]-op[k];break;
case '*':rez=op[k-1]*op[k];break;
case '/':rez=op[k-1]/op[k];break;
}
d--;
k--;
op[k]=rez;
}
int main() {
fin=fopen("evaluare.in","r");
fout=fopen("evaluare.out","w");
fgets(v,1000,fin);
l=strlen(v);
if(v[l-1]=='\n'){v[l-1]=0;l--;}
pr['(']=0;
pr['+']=pr['-']=1;
pr['*']=pr['/']=2;
int ok=0;
for(i=0;i<l;i++){
if(v[i]>='0'&&v[i]<='9'){
nr=nr*10+v[i]-'0';
ok=1;
}
else{
if(ok==1){
op[++k]=nr;
ok=0;nr=0;
}
if(v[i]=='('){
st[++d]=v[i];
}
else{
if(v[i]==')'){
while(st[d]!='('){
calcul();
}
d--;//elimin paranteza( din stiva
}
else{
while(d>0&&pr[v[i]]<=pr[st[d]]){
calcul();
}
st[++d]=v[i];
}
}
}
}
if(ok==1){
op[++k]=nr;
}
while(d>0){
calcul();
}
fprintf(fout,"%d",op[1]);
return 0;
}