Cod sursa(job #2203262)

Utilizator ksanyi2000Kalman Sandor ksanyi2000 Data 11 mai 2018 18:35:26
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 2.31 kb
#include <iostream>
#include <fstream>
using namespace std;
int elvegez(char c, int a, int b)
{
    switch(c)
    {
        case '+': return a+b;

        case '-': return a-b;

        case '*': return a*b;

        case '/': return a/b;
    }
    return 0;
}
bool szamjegy(char c)
{
    return c>='0'&&c<='9';
}
int kiertekel(char muvelet_sor[])
{
    int i=0, szamok[50005], szi = 0;
    char muveletek[50005], muvi = 0;
    while(muvelet_sor[i]!='\0')
    {
        if(szamjegy(muvelet_sor[i]))
        {
            int a=0;
            while(szamjegy(muvelet_sor[i]))
            {
                a *= 10;
                a += muvelet_sor[i]-'0';
                i++;
            }
            szamok[szi++] = a;
        }
        else if(muvelet_sor[i] == '+' || muvelet_sor[i] == '-')
        {
            while(muvi && muveletek[muvi-1]!='(')
            {
                szamok[szi-2] = elvegez(muveletek[muvi-1],szamok[szi-2],szamok[szi-1]);
                szi--;
                muvi--;
            }
            muveletek[muvi++] = muvelet_sor[i++];
        }
        else if(muvelet_sor[i] == '*' || muvelet_sor[i] == '/')
        {
            while(muvi && muveletek[muvi-1]!='(' && muveletek[muvi-1]!='+' && muveletek[muvi-1]!='-')
            {
                szamok[szi-2] = elvegez(muveletek[muvi-1],szamok[szi-2],szamok[szi-1]);
                szi--;
                muvi--;
            }
            muveletek[muvi++] = muvelet_sor[i++];
        }
        else if(muvelet_sor[i] == '(')
        {
            i++;
            muveletek[muvi++] = '(';
        }
        else if(muvelet_sor[i] == ')')
        {
            i++;
            while(muveletek[muvi-1] != '(')
            {
                szamok[szi-2] = elvegez(muveletek[muvi-1],szamok[szi-2],szamok[szi-1]);
                szi--;
                muvi--;
            }
        }
        else
            i++;
    }
    while(muvi)
    {
        szamok[szi-2] = elvegez(muveletek[muvi-1],szamok[szi-2],szamok[szi-1]);
        szi--;
        muvi--;
    }
    return szamok[0];
}
int main()
{
    ifstream in("evaluare.in");
    ofstream out("evaluare.out");

    char muvelet_sor[100005];
    in.get(muvelet_sor,100005);

    out << kiertekel(muvelet_sor) << '\n';
    return 0;
}