Pagini recente » Cod sursa (job #3293820) | Diferente pentru implica-te/arhiva-educationala intre reviziile 197 si 223 | Cod sursa (job #3293359) | Cod sursa (job #3284747) | Cod sursa (job #3294057)
#include <fstream>
#include <string>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
string s;
int p;
int expression();
int term();
int factor();
int expression() {
int result = term();
while (p < s.length() && (s[p] == '+' || s[p] == '-')) {
if (s[p] == '+') {
p++;
result += term();
} else {
p++;
result -= term();
}
}
return result;
}
int term() {
int result = factor();
while (p < s.length() && (s[p] == '*' || s[p] == '/')) {
if (s[p] == '*') {
p++;
result *= factor();
} else {
p++;
int divisor = factor();
if (divisor != 0) {
result /= divisor;
} else {
g << "Error: Division by zero\n";
return 0;
}
}
}
return result;
}
int factor() {
if (s[p] == '(') {
p++;
int result = expression();
p++;
return result;
} else {
int start = p;
while (p < s.length() && isdigit(s[p])) {
p++;
}
return stoi(s.substr(start, p - start));
}
}
int main() {
f >> s;
p = 0;
int result = expression();
g << result;
return 0;
}