Pagini recente » Cod sursa (job #1317838) | Cod sursa (job #1916164) | Cod sursa (job #2440395) | Cod sursa (job #1018713) | Cod sursa (job #251370)
Cod sursa(job #251370)
#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 termen();
long expp(long);
long expresie()
{
long value;
value = termen();
//printf("Ex termen %ld\n", value);
return expp(value);
}
long expp(long value)
{
long next;
char op = *p;
if (op == '+' || op == '-')
{
do
{
p++;
next = termen();
value = operatie(value, op, next);
op = *p;
}
while (op == '+' || op == '-');
//printf("Expp value after op %ld\n", value);
}
return value;
}
long factor();
long term(long);
long termen()
{
long value = factor();
//printf("Termen factor %ld\n", value);
return term(value);
}
long term(long value)
{
char op = *p;
long next;
if (op == '*' || op == '/')
{
do
{
p++;
next = factor();
value = operatie(value, op, next);
op = *p;
}
while (op == '*' || op == '/');
//printf("Term after %ld\n", value);
}
return value;
}
long factor()
{
long value = 0;
if (*p == '(')
{
p++;
//printf("Expresie (%c\n", *p);
value = expresie();
//printf("Sfarsit de Expresie %s\n", p);
p++;
//printf("*p =%c\n", *p);
}
else
{
while ('0' <= *p && *p <= '9')
{
value = value * 10 + (*p - '0');
p++;
}
}
//printf("Factor %ld\n", value);
return value;
}
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 = expresie();
//printf("%s = %ld\n", a, b);
fprintf(fout, "%ld", b);
fclose(fout);
return 0;
}