Cod sursa(job #683198)

Utilizator DumitracheIulianDumitrache Iulian DumitracheIulian Data 20 februarie 2012 10:07:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in ("evaluare.in");
ofstream out("evaluare.out");
int const N=100010;
char sir[N];
int p;

int expresie ();
int termen ();
int factor ();
bool cifra (char x)
{
    if(('0'<=x)&&(x<='9'))
        return true;
    return false;
}
int factor ()
{
    int val=0,semn=1;
    while(sir[p]=='-')
        {semn=semn*(-1);p++;}
    if(sir[p]=='(')
    {
        p++;
        val=expresie();
        p++;
        return val*semn;
    }
    while(cifra(sir[p]))
    {
        val=val*10+sir[p]-'0';
        p++;
    }
    return val*semn;
}
int termen ()
{
        int prod=factor();
        while(sir[p]=='*'||sir[p]=='/')
            if(sir[p]=='*')
            {
                p++;
                prod*=factor();
            }
        //if(sir[p]=='/')
            else
            {
                p++;
                prod/=factor();
            }
        return prod;
}
int expresie ()
{
    int sum=termen();
    while(sir[p]=='+'||sir[p]=='-')
        if(sir[p]=='+')
        {
            p++;
            sum+=termen();
        }
        //if(sir[p]=='-')
        else
        {
            p++;
            sum-=termen();
        }
        return sum;
}
int main()
{
    in>>sir;
    out<<expresie()<<"\n";
    return 0;
}