Cod sursa(job #2814040)

Utilizator testermastertestermaster testermaster Data 7 decembrie 2021 14:22:26
Problema Evaluarea unei expresii Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#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;
}