Pagini recente » Cod sursa (job #3258662) | Cod sursa (job #1220063) | Cod sursa (job #1178583) | Cod sursa (job #46252) | Cod sursa (job #1550690)
// http://www.infoarena.ro/problema/evaluare
#include <fstream>
using namespace std;
string s;
int p = 0;
int expresie();
int factor() { // Un factor este un numar sau o expresie intre paranteze.
int r;
if(s[p] == '(') {
p++; // Trecem in dreapta parantezei deschise.
r = expresie();
p++; // Trecem in dreapta parantezei inchise.
}
else // Determinam valoarea numarului.
for (r = 0; '0' <= s[p] and s[p] <= '9'; p++)
r = 10 * r + s[p] - '0';
return r;
}
int termen() { // Un termen este un factor sau un produs de factori.
int r = factor();
while (s[p] == '*' or s[p] == '/')
if (s[p] == '*') {
p++; r *= factor();
}
else {
p++; r /= factor();
}
return r;
}
int expresie() { // O expresie este un termen sau o suma de termeni.
int r = termen();
while (s[p] == '+' or s[p] == '-')
if(s[p] == '+') {
p++; r += termen();
}
else {
p++; r -= termen();
}
return r;
}
int main() {
ifstream fi("evaluare.in");
ofstream fo("evaluare.out");
fi >> s;
fo << expresie();
}