Cod sursa(job #3335284)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 22 ianuarie 2026 10:46:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include<iostream>
#include<fstream>
using namespace std;
int expresie(string&s,int &pozi);
int termen(string&s,int &pozi);
int factor(string&s,int &pozi);
int numar(string&s,int &pozi);
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int expresie(string &s,int &pozi){
    int semn=1;
    int rez=factor(s,pozi);
    while(pozi<s.size() &&(s[pozi]=='-'||s[pozi]=='+')){
        semn=s[pozi]=='+'?1:-1;
        ++pozi;
        rez+=semn*factor(s,pozi);
    }
    return rez;     
}
int factor(string &s,int &pozi){
    int rez=termen(s,pozi);
    //cout<<"result is:"<<rez<<endl;
    int nr;
    bool inm=1;
    while(pozi<s.size() &&(s[pozi]=='*'|| s[pozi]=='/')){
        inm=s[pozi]=='*'?1:0;
        ++pozi;
        nr=termen(s,pozi);
       // cout<<"inm: "<<nr<<endl;
        if(inm==1){
            rez*=nr;
        }else{
            rez/=nr;
        }
    }
    return rez;
}
int termen(string &s,int &pozi){
    //next
    if(s[pozi]=='('){   
        pozi++;
        int nr=expresie(s,pozi);
       // cout<<nr<<endl;
        ++pozi;
        return nr;
    }else{
        return numar(s,pozi);
    }
    
}
int numar(string &s,int &pozi){
    int nr=0;
    while(pozi<s.size() &&isdigit(s[pozi])){
        nr=(10*nr)+(s[pozi]-'0');
        pozi++;
    }
    return nr;
}
int main(){
    string s;
    fin>>s;
    int pozStart=0;
    fout<<expresie(s,pozStart);
    return 0;
}