Cod sursa(job #533139)

Utilizator ivan_marianIvan Liviu Marian ivan_marian Data 13 februarie 2011 11:25:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
int pr[256],i,j,b[100001],n,m,nr,ok;
char c,a[100001];
void calcul() {
	int rez;
	switch(a[n]){
	case'+':rez=b[m-1]+b[m];
		break;
	case'-':rez=b[m-1]-b[m];  
        break;
    case'*':rez=b[m-1]*b[m];
		break;
	case'/':rez=b[m-1]/b[m];
        break;
	}
n--;m--;b[m]=rez;	
	
		
	}
int main() {
	pr['(']=0;
	pr['+']=pr['-']=1;
	pr['*']=pr['/']=2;
	while(fscanf(f,"%c",&c)!=EOF&&c!='\n')
        if(c>='0'&&c<='9'){
			ok=1;
			nr=nr*10+c-'0';}
		else {
			if(ok==1){
			m++;
			b[m]=nr;
			nr=0;ok=0;
			}
			if(c=='(')
				n++,a[n]=c;
			else
				if(c==')'){
					while(a[n]!='(')
						calcul();
					n--;
				}
				else{
					while(n!=0&&pr[a[n]]>=pr[c]&&a[n]!='(')
						calcul();
					n++;
					a[n]=c;
				}
		}
if(ok==1)
	m++,b[m]=nr;
	while(n!=0)
		calcul();
	fprintf(g,"%d",b[1]);
	return 0;
		}