Pagini recente » Cod sursa (job #1470215) | Cod sursa (job #704009) | Cod sursa (job #1207155) | Cod sursa (job #2580074) | Cod sursa (job #509448)
Cod sursa(job #509448)
#include <fstream>
using namespace std;
char s[100001];
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
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] == '*' || s[p] == '/')
if (s[p] == '*') {
p++; r *= factor();
}
else {
p++; r /= factor();
}
return r;
}
int expresie() { // O expresie este un numar sau un termen al unei sume.
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();
}