Pagini recente » Cod sursa (job #661326) | Cod sursa (job #3213909) | Cod sursa (job #777643) | Cod sursa (job #3242736) | Cod sursa (job #251332)
Cod sursa(job #251332)
#include <stdio.h>
#include <stdlib.h>
#define MAX 100000
char *p;
long operatie(long a, char c, long b)
{
//printf("operatie=%c\n", c);
switch(c)
{
case '+' : return a + b;
case '-' : return a - b;
case '*' : return a * b;
case '/' : return a / b;
}
return 0;
}
long eval();
long number()
{
long nr = 0;
if (*p == '(')
{
return eval(p);
}
else
{
while ('0' <= *p && *p <= '9')
{
nr = nr * 10 + (*p - '0');
p++;
}
}
//printf("number=%ld\n", nr);
return nr;
}
long eval()
{
long a, c;
char op;
if (*p == '(')
{
p++;
a = eval(p);
p++;
}
else
a = number(p);
//printf("a=%ld\n", a);
op = *p;
//printf("op=%c\n", op);
if (*p == '+' || *p == '-')
{
p++;
return operatie(a, op, eval());
}
else if (*p == '*' || *p == '/')
{
p++;
c = operatie(a, op, number(p));
///printf("C=%ld\n", c);
if (*p != '\0')
{
op = *p;
p++;
return operatie(c, op, eval(p));
}
else return c;
}
else
{
return a;
}
}
int main()
{
char a[MAX];
long b;
FILE *fin, *fout;
if ((fin = fopen("evaluare.in", "r")) == NULL)
{
printf("Eroare \n");
exit(-1);
}
fscanf(fin, "%s", a);
fclose(fin);
fout = fopen("evaluare.out", "w");
p = &a[0];
b = eval();
//printf("%s = %ld\n", a, b);
fprintf(fout, "%ld", b);
fclose(fout);
return 0;
}