Cod sursa(job #1359557)

Utilizator TataruTataru Mihai Tataru Data 24 februarie 2015 23:28:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#define inFile "evaluare.in"
#define outFile "evaluare.out"
#define N 100003


using namespace std;

char sir[N];
int poz;

void read();
void write();
int eval();
int expr();
int fact();

int main()
{
    read();
    write();
}

int eval()
{
    int num = expr();
    while(sir[poz] == '+' || sir[poz] == '-')
        switch(sir[poz]){
            case '+' :  poz++;
                        num += expr();
                        break;
            case '-' :  poz++;
                        num -= expr();
                        break;
        }
    return num;
}

int expr()
{
    int num = fact();
    while(sir[poz] == '*' || sir[poz] == '/')
        switch(sir[poz]){
            case '*' :  poz++;
                        num *= fact();
                        break;
            case '/' :  poz++;
                        num /= fact();
                        break;
        }
    return num;
}

int fact()
{
    int num = 0;
    if(sir[poz] == '('){
        poz++;
        num = eval();
        poz++;
    }else{
        while(sir[poz] >= '0' && sir[poz] <= '9'){
            num = num * 10 + sir[poz] - '0';
            poz++;
        }
    }
    return num;
}

void read()
{
    ifstream fin(inFile);
    fin>>sir;
    fin.close();
}

void write()
{
    ofstream fout(outFile);
    fout<<eval();
    fout.close();
}