Cod sursa(job #594236)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 6 iunie 2011 17:58:57
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstdlib>

using namespace std;

string a;

double s2r (int left,int right)
{
    int i,n=0;
    for (i=left; i<=right; i++)
    {
        n=n*10+a[i]-'0';
    }
    return n;
}

double eval(int left, int right)
{
    int p1 =-1, p2 =-1, p3 =-1, p4 =-1, pp =0;
    for (int i = left; i <= right; i++)
    {
        if (a[i]=='(')
            {
                pp++;
            } else if (a[i]==')')
            {
                pp--;
            } else if (pp==0)
            {
                if (a[i]=='+') p1=i;
                if (a[i]=='-') p2=i;
                if (a[i]=='*') p3=i;
                if (a[i]=='/') p4=i;
            }
    }

    if (p1>p2)
    {
        return eval(left,p1-1)+eval(p1+1,right);
    } else if (p2>0)
    {
        return eval(left,p2-1)-eval(p2+1,right);
    } else if (p3>p4)
    {
        return eval(left,p3-1)*eval(p3+1,right);
    } else if (p4>0)
    {
        return eval(left,p4-1)/eval(p4+1,right);
    } else if (a[left]=='(')
    {
        return eval(left+1,right-1);
    } else return s2r(left,right);
}

int main ()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");
    f >> a;


    g << eval(0,a.length()-1);
    return 0;
}