Cod sursa(job #892801)

Utilizator karlaKarla Maria karla Data 26 februarie 2013 11:45:13
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>
#include<string.h>
char s[100010];
long l,i=1;
FILE*f=fopen("evaluare.in","r"),*g=fopen("evaluare.out","w");

void citire(){
  fgets(s+1,100002,f);
  l=strlen(s+1);
  fclose(f);
}

long expresie();

long evaluare(){
	long nr=0;
    while(s[i]<='9'&&s[i]>='0'){
		nr=nr*10+(s[i]-'0');
		i++;
	}
	return nr;
}

long factor(){
	long t;
	if(s[i]=='('){  // intalnim o parateza '('
	  i++;   // trecem la urmatorul termen
	  t=expresie();  // calculam ce e inauntrul parntezei
	  i++;    // sarim peste ')'
	}
	else{
	   t=evaluare(); // transorm termenul in numar
	}
	return t;
}

long termen(){
    long r=factor();
	while((s[i]=='*' || s[i]=='/') && i<l){   //urmeaza factori
		i++;    
	   if(s[i-1]=='*'){ r*=factor(); }  // calculez factorul
	   else if(s[i-1]=='/'){r/=factor();}
	}
	return r;
}

long expresie(){
    long h=termen();
	while((s[i]=='+' || s[i]=='-') && i<l){
	    i++;
		if(s[i-1]=='+'){h+=termen();}
		else if(s[i-1]=='-'){h-=termen();}
	}
	return h;
}

int main(){
citire();
long t=expresie();
fprintf(g,"%ld ",t);
fclose(f);
return 0;
}