Pagini recente » Cod sursa (job #1400050) | Cod sursa (job #2626458) | Cod sursa (job #2763515) | Borderou de evaluare (job #367033) | Cod sursa (job #892677)
Cod sursa(job #892677)
#include<stdio.h>
#include<string>
char s[100010];
long l,i=1;
FILE*f=fopen("evaluare.in","r"),*g=fopen("evaluare.out","w");
void citire(){
fgets(s+1,100001,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]=='*' && i<l){ //urmeaza factori
i++;
r*=factor(); // calculez factorul
}
while(s[i]=='/' && i<l){
i++;
r/=factor();
}
return r;
}
long expresie(){
long h=termen();
while(s[i]=='+' && i<l){
i++;
h+=termen();
}
while(s[i]=='-' && i<l){
i++;
h-=termen();
}
return h;
}
int main(){
citire();
long t=expresie();
fprintf(g,"%ld ",t);
fclose(f);
return 0;
}