Pagini recente » Cod sursa (job #1604040) | Cod sursa (job #3326556) | Cod sursa (job #544263) | Cod sursa (job #929379) | Cod sursa (job #3332894)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string expresie;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int pozUltOp( int st, int dr ,char op1, char op2) {
int nrPar=0;
for ( int i = dr ; i >= st; i-- ) {
char x =expresie[i];
if ( x == ')') {
nrPar++;
}
if ( x == '(' ) {
nrPar--;
}
if ( nrPar == 0 && (op1 == expresie[i] || op2 == expresie[i])) {
return i;
}
}
return -1;
}
int transfNumar(int st, int dr)
{
int numar=0;
for(int i=st;i<=dr;i++)
numar = numar * 10 + ( expresie[i] - '0');
return numar;
}
int eval( int st, int dr) {
int poz = pozUltOp( st, dr, '+', '-');
if ( poz != -1) {
int expr1 = eval( st, poz - 1);
int expr2 = eval( poz + 1, dr);
if ( expresie[poz] == '+') {
return expr1 + expr2;
}
return expr1 - expr2;
}
poz = pozUltOp( st, dr, '*', '/');
if ( poz != -1) {
int expr1 = eval( st, poz - 1);
int expr2 = eval( poz + 1, dr);
if ( expresie[poz] == '*') {
return expr1 * expr2;
}
return expr1 / expr2;
}
if ( expresie[st] == '(' && expresie[dr] == ')') {
return eval( st + 1, dr - 1);
}
return transfNumar( st, dr);
}
int main() {
getline(fin, expresie);
fout << eval(0, expresie.length() - 1);
return 0;
}