Cod sursa(job #3127110)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 7 mai 2023 12:19:24
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.57 kb
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <fstream>
#include <vector>
#include <cstring>
#include <stack>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack<char>semne;
stack<char>numere;
char s[100005];

int calc(int first, int second, int op) {
    if(op == '-')
        return second-first;
    if(op == '*')
        return second*first;
    if(op == '+')
        return second+first;
    if(op == '/')
    return second/first;
}

int grad(char t) {
    if(t == '/' || t == '*')
        return 2;
    if(t == '+' || t=='-' )
        return 1;
    return 0;
}

int evaluate() {
    int length = strlen(s+1);
    for(int i = 1; i <= length; ++i) {
        if(s[i] == ' ')
            continue;
        if(s[i]=='(')
            semne.push('(');
        if(s[i]>='0' && s[i] <= '9')
        {
            int number = 0;
            while(s[i]>='0' && s[i] <= '9' && i <= length){
                    number = number*10 + s[i]-'0';
            
                ++i;
            }
        numere.push(number);
        }
        if(grad(s[i])){
            while(semne.size() != 0 && grad(semne.top()) >= grad(s[i])) {
                int first = numere.top();
                numere.pop();
                int second = numere.top();
                numere.pop();
                int rez = calc(first, second,semne.top());
                numere.push(rez);
                semne.pop();
            }
        semne.push(s[i]);
        }
        if(s[i]==')'){
            while(semne.size() != 0 && semne.top()!='(') {
                  int first = numere.top();
                numere.pop();
                int second = numere.top();
                numere.pop();
                int rez = calc(first, second,semne.top());
                numere.push(rez);
                semne.pop();
            }
            semne.pop();
        }
        

    }
     while(semne.size() > 0) {
                  int first = numere.top();
                numere.pop();
                int second = numere.top();
                numere.pop();
                int rez = calc(first, second,semne.top());
                numere.push(rez);
                semne.pop();
            }
    return  numere.top();
 return 0;   
}

int main(){
    
    fin>>(s+1);
    fout<<evaluate();
}