Cod sursa(job #613099)

Utilizator predator5047Butiu Alexandru Octavian predator5047 Data 15 septembrie 2011 20:44:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
string::iterator it;
void citire(string &s);
int termen(); int factor(); int eval();
int main()
{
    string exp;
    citire(exp);
    it=exp.begin();
    ofstream fout("evaluare.out");
    fout<<eval();
    fout.close();
    return 0;
}

int eval()
{
    int r=termen();
    while(*it=='+'||*it=='-')
    {
        switch(*it)
        {
            case '+':
                ++it;
                r+=termen();
                break;
            case '-':
                ++it;
                r-=termen();
                break;
        }
    }
    return r;
}

int termen()
{
    int r=factor();
    while(*it=='/'||*it=='*')
    {
        switch(*it)
        {
            case '/':
                ++it;
                r/=factor();
                break;
            case '*':
                ++it;
                r*=factor();
                break;
        }
    }
    return r;
}

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

void citire(string &s)
{
    ifstream fin("evaluare.in");
    fin>>s;
    fin.close();
}