Pagini recente » Cod sursa (job #763904) | Cod sursa (job #580567) | Cod sursa (job #2295713) | Cod sursa (job #2439921) | Cod sursa (job #3210248)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
char* p;
int eval();
int termen();
int factor();
int main() {
f >> s;
p = s;
g << eval();
return 0;
}
int eval() {
int rez = termen();
while (*p == '+' || *p == '-') {
if (*p == '+') {
p++;
rez += termen();
} else {
p++;
rez -= termen();
}
}
return rez;
}
int termen() {
int rez = factor();
while (*p == '*' || *p == '/') {
if (*p == '*') {
p++;
rez *= factor();
} else {
p++;
int temp = factor();
if (temp != 0) {
rez /= temp;
} else {
cerr << "Eroare: Divizare la zero!" << endl;
exit(1);
}
}
}
return rez;
}
int factor() {
int rez = 0;
if (*p == '(') {
p++;
rez = eval(); // Modificarea necesară pentru tratarea corectă a parantezelor
p++;
} else {
while (*p >= '0' && *p <= '9') {
rez = rez * 10 + (*p - '0');
p++;
}
}
return rez;
}