Pagini recente » Cod sursa (job #217540) | Rating Berintan Daniel (alphapowrr) | Monitorul de evaluare | Cod sursa (job #492445) | Cod sursa (job #2814040)
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE 100001
int eval(char *p, int *i);
int termen(char *p, int *i);
int factor(char *p, int *i);
int main()
{
FILE *f = fopen("evaluare.in", "r");
FILE *g = fopen("evaluare.out", "w");
char s[MAX_LINE];
char *p;
int i = 0;
fscanf(f, "%s", s);
p = s;
fprintf(g, "%d", eval(p, &i));
return 0;
}
int eval(char *p, int *i)
{
int r = termen(p, i);
while (p[*i] == '+' || p[*i] == '-')
if(p[*i] == '+') {
(*i)++;
r = r + termen(p, i);
}
else {
(*i)++;
r = r - termen(p, i);
}
return r;
}
int termen(char *p, int *i)
{
int r = factor(p, i);
while(p[*i] == '*' || p[*i] == '/')
if(p[*i] == '*'){
(*i)++;
r = r * factor(p, i);
}
else{
(*i)++;
r = r / factor(p, i);
}
return r;
}
int factor(char *p, int *i)
{
int r = 0;
if(p[*i] == '(')
{
(*i)++;
r = eval(p, i);
(*i)++;
}
else{
while(p[*i] <= '9' && p[*i] >= '0'){
r = r * 10 + (int)p[*i] - '0';
(*i)++;
}
}
return r;
}