Pagini recente » Cod sursa (job #1247253) | Cod sursa (job #2944362) | Cod sursa (job #620757) | Cod sursa (job #2749945) | Cod sursa (job #2274562)
#include <stdio.h>
#define MAX 100000
FILE *fin,*fout;
char ch,p[2*MAX],st[MAX];
int i,j,a,k,nr[MAX/2];
int numar(){
int nr=0;
while('0'<=p[a] && p[a]<='9')
nr=nr*10+p[a++]-'0';
return nr;
}
int prioritate(int semn){
if(semn=='(')
return 2;
if(semn=='+' || semn=='-')
return 1;
return 0;
}
int eval(){
a=0;
while(a<i){
if('0'<=p[a] && p[a]<='9')
nr[k++]=numar();
else if(p[a]==' ')
a++;
else{
switch(p[a]){
case '+': nr[k-2]+=nr[k-1]; break;
case '-': nr[k-2]-=nr[k-1]; break;
case '*': nr[k-2]*=nr[k-1]; break;
case '/': nr[k-2]/=nr[k-1]; break;
}
k--;
a++;
}
}
return nr[0];
}
int main(){
fin=fopen("evaluare.in","r");
fout=fopen("evaluare.out","w");
ch=fgetc(fin);
while(ch!='\n'){
if('0'<=ch && ch<='9'){
p[i++]=ch;
}else{
p[i++]=' ';
if(ch=='('){
st[j++]=ch;
}else if(ch==')'){
while(j>0 && st[j-1]!='(')
p[i++]=st[--j];
j--;
}else{
while(j>0 && prioritate(st[j-1])<=prioritate(ch))
p[i++]=st[--j];
st[j++]=ch;
}
}
ch=fgetc(fin);
}
while(j>0)
p[i++]=st[--j];
fprintf(fout,"%d\n",eval());
fclose(fin);
fclose(fout);
return 0;
}