Pagini recente » Cod sursa (job #1206636) | Cod sursa (job #2731368) | Cod sursa (job #443527) | Cod sursa (job #2669168) | Cod sursa (job #1570884)
#include <iostream>
#include <fstream>
#define MAX_N 100000
using namespace std;
ifstream file_in ("evaluare.in");
ofstream file_out ("evaluare.out");
char sir[MAX_N + 1];
int poz;
int expresie();
int termen();
int factor();
int expresie() {
int sum = termen();
if (sir[poz] == '+' || sir[poz] == '-') {
if (sir[poz] == '+') {
poz++;
sum += termen();
}
if (sir[poz] == '-') {
poz++;
sum -= termen();
}
}
return sum;
}
int termen() {
int prod = factor();
if (sir[poz] == '*' || sir[poz] == '/') {
if (sir[poz] == '*') {
poz++;
prod *= factor();
}
if (sir[poz] == '/') {
poz++;
prod /= factor();
}
}
return prod;
}
int factor() {
int val = 0, semn = 1;
while (sir[poz] == '-') {
poz++;
semn = -semn;
}
if (sir[poz] == '(') {
poz++;
val = expresie();
poz++;
return val * semn;
}
while (sir[poz] >= '0' && sir[poz] <= '9') {
val = val * 10 + (sir[poz++] - '0');
}
return val * semn;
}
int main()
{
int rasp;
// Citirea datelor
file_in >> sir;
// Calcularea solutiei
rasp = expresie();
// afisarea solutiei
file_out << rasp;
return 0;
}