Cod sursa(job #1877702)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 13 februarie 2017 18:00:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
//
//  main.cpp
//  Evaluare unei expresii
//
//  Created by Albastroiu Radu on 12/29/16.
//  Copyright © 2016 Albastroiu Radu. All rights reserved.
//

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int first(int& it, string& expresion);
int second(int& it, string& expresion);
int third(int& it, string& expresion);


int third(int& it, string& expresion)
{
    int r = 0;
    if(expresion[it] == '(')
    {
        ++it;
        r = first(it, expresion);
        ++it;
    }
    else
    {
        while(expresion[it] >= '0' && expresion[it] <= '9')
        {
            r = r * 10 + expresion[it] - '0';
            it++;
        }
    }
    
    return r;
}

int second(int& it, string& expresion)
{
    int r = third(it, expresion);
    
    while(expresion[it] == '*' || expresion[it] == '/')
    {
        switch(expresion[it])
        {
            case '*': ++it; r *= third(it, expresion); break;
            case '/': ++it; r /= third(it, expresion); break;
        }
    }
    return r;
}

int first(int& it, string& expresion)
{
    int r = second(it, expresion);
    
    while(expresion[it] == '+' || expresion[it] == '-')
    {
        switch(expresion[it])
        {
            case '+': ++it; r += second(it, expresion); break;
            case '-': ++it; r -= second(it, expresion); break;
        }
    }
    return r;
}


int main()
{
    string expresie;
    getline(fin, expresie);
    int it = 0;
    int result = first(it, expresie);
    
    fout << result;
}