Cod sursa(job #792607)

Utilizator preg_concursPregatire Concurs preg_concurs Data 27 septembrie 2012 22:52:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
#include <cstdio>

using namespace std;

const long M=100001;
char s[M], *p=s;

FILE *f, *g;

long termen();
long factor();

long eval()
{
    long r;

    r=termen();

    while(*p=='+' || *p=='-')
    if(*p=='+')
        {
        p++;
        r+=termen();
        }
    else
        if(*p=='-')
        {
        p++;
        r-=termen();
        }
    return r;
}


long termen()
{
    long r;

    r=factor();

    while(*p=='*' || *p=='/')
    if(*p=='*')
        {
        p++;
        r*=factor();
        }
    else
        if(*p=='/')
            {
                p++;
                r/=factor();
            }
    return r;
}


long factor()
{
    long r=0;

    if(*p=='(')
        {
            p++;
            r=eval();
            p++;
        }
    else
        if(*p==')')
            p++;
        else
            {
                while(*p>='0' && *p<='9')
                    {
                    r=r*10+*p-'0';
                    p++;
                    }
            }
    return r;
}

int main()
{

f=fopen("evaluare.in", "r");
g=fopen("evaluare.out", "w");

fgets(s, M, f);
fprintf(g, "%ld\n", eval());

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