Pagini recente » Cod sursa (job #933279) | Cod sursa (job #1707526) | Cod sursa (job #2780099) | Cod sursa (job #2568405) | Cod sursa (job #1314829)
#include <stdio.h>
#include <stdlib.h>
/**
expr -> term ( ('+'|'-')term )*
term -> fact ( ('*'|'/')fact )*
fact -> int | '('expr')'
**/
FILE *fi;
char first;
int expr();
int term();
int fact();
int INT();
int main()
{
fi=fopen("evaluare.in", "r");
FILE *fo=fopen("evalure.out", "w");
first=fgetc(fi);
fprintf(fo, "%d\n", expr());
fclose(fi);
fclose(fo);
return 0;
}
int expr(){
int a;
char semn;
a=term();
while(first=='+' || first=='-'){
semn=first;
first=fgetc(fi);
if(semn=='+')
a=a+term();
else
a=a-term();
}
return a;
}
int term(){
int a;
char semn;
a=fact();
while(first=='*' || first=='/'){
semn=first;
first=fgetc(fi);
if(semn=='*')
a=a*fact();
else
a=a/fact();
}
return a;
}
int fact(){
int a;
a=0;
if(first=='('){
first=fgetc(fi);
a=expr();
first=fgetc(fi);
}
else if('0'<=first && first<='9')
a=INT();
return a;
}
int INT(){
int a=0;
while('0'<=first && first<='9'){
a=a*10+first-'0';
first=fgetc(fi);
}
return a;
}