Pagini recente » Cod sursa (job #2388427) | Cod sursa (job #3339177) | Cod sursa (job #3329743) | Cod sursa (job #911827) | Cod sursa (job #3315245)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
// string cu expresia si incep de la pozitia 0
string s;
int poz = 0;
int evaluare();
int factor() {
long long rez = 0;
if(s[poz] == '(') {
// daca incepe paranteza, o iau ca si pe alta
// expresie separata, deci bag o alta evaluare
// si se tot apeleaza ele unele pe altele
poz++;
rez = evaluare();
poz++;
} else {
// daca n-am +-*/() inseamna ca am numar, deci construiesc nr
while(s[poz] >= '0' && s[poz] <= '9') {
rez = rez * 10 + (s[poz] - '0');
// si cresc poz
poz++;
}
}
return rez;
}
int termen() {
long long f = factor();
while(s[poz] == '*' || s[poz] == '/') {
if(s[poz] == '*') {
// cresc pozitia si inmultesc
poz++;
f = f * factor();
} else if(s[poz] == '/') {
// cresc pozitia si impart
poz++;
f = f / factor();
}
}
return f;
}
int evaluare() {
int rez = termen();
while(s[poz] == '+' || s[poz] == '-') {
if(s[poz] == '-') {
// cresc pozitia si scad
poz++;
rez = rez - termen();
} else if(s[poz] == '+'){
// cresc pozitia si adun
poz++;
rez = rez + termen();
}
}
return rez;
}
int main()
{
fin >> s;
// punem asta aici ca sa oprim programul fiindca n-avem op cu $
// as putea pune = sau ceva de genu
s += '$';
fout << evaluare();
return 0;
}