Cod sursa(job #479115)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 22 august 2010 19:25:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#include <string.h>
using namespace std;

char e[100001];
int lg, i;

int eval ();
int termen ();
int factor ();

int is_number (char ch)
{
    if (ch >= '0' && ch <= '9')
        return 1;
    return 0;
}

int factor ()
{
    int r = 0;

    if (e[i] == '(')
    {
        i ++;
        r = eval ();
        i ++;
    }
    else if (is_number (e[i]))
    {
        while (is_number (e[i]))
        {
            r = r * 10 + e[i] - '0';
            i ++;
        }
    }

    return r;
}

int termen ()
{
    int r;
    char ch;

    r = factor ();
    while (i < lg && e[i] == '*' || e[i] == '/')
    {
        ch = e[i];
        i ++;
        if (ch == '*')
            r *= factor ();
        else
            r /= factor ();
    }

    return r;
}

int eval ()
{
    int r;
    char ch;

    r = termen ();
    while (i < lg && e[i] == '+' || e[i] == '-')
    {
        ch = e[i];
        i ++;
        if (ch == '+')
            r += termen ();
        else
            r -= termen ();
    }

    return r;
}

int main ()
{
    FILE *f = fopen ("evaluare.in","r");
    FILE *g = fopen ("evaluare.out","w");
    fscanf (f,"%s", e);
    lg = strlen (e);

    fprintf (g, "%d\n", eval ());

    fclose (g);
    fclose (f);
    return 0;
}