Pagini recente » Cod sursa (job #628179) | Cod sursa (job #99523) | Cod sursa (job #1948236) | Cod sursa (job #1413420) | Cod sursa (job #696933)
Cod sursa(job #696933)
#include <malloc.h>
#include <cstring>
#include <cstdio>
#include <cmath>
char data[100128];
struct Value {
int val;
int imp;
char oper;
Value * next;
};
Value * list;
Value ** cnt = &list;
void add(int val, int imp, char oper) {
(*cnt) = (Value *)malloc(sizeof(Value));
(*cnt)->val = val;
(*cnt)->imp = imp;
(*cnt)->oper = oper;
(*cnt)->next = 0;
cnt = &(*cnt)->next;
}
int main() {
FILE * in = fopen("evaluare.in", "rt");
FILE * out = fopen("evaluare.out", "wt");
int n = strlen(fgets(data, 100128, in)) - 1;
int value = 0, importance = 0;
add(0, 0, 0);
for (int i = 0; i < n; ++i) {
if (data[i] == '(') {
importance += 2;
} else if (data[i] == ')') {
importance -= 2;
} else {
if (data[i] == '+' || data[i] == '-') {
add(value, importance + 1, data[i]);
value = 0;
} else if (data[i] == '*' || data[i] == '/') {
add(value, importance + 2, data[i]);
value = 0;
} else {
value = value * 10 + data[i] - '0';
}
}
}
add(value, 0, '=');
add(0, 0, 0);
/*
Value * v = list;
while (list->next->next->oper) {
if (v->imp < v->next->imp && v->next->imp >= v->next->next->imp) {
switch(v->next->oper) {
case '+':
v->next->next->val = v->next->val + v->next->next->val;
break;
case '-':
v->next->next->val = v->next->val - v->next->next->val;
break;
case '*':
v->next->next->val = v->next->val * v->next->next->val;
break;
case '/':
v->next->next->val = v->next->val / v->next->next->val;
break;
}
v->next = v->next->next;
}
v = v->next;
if (!v->next->next) {
v = list;
}
}
*/
fprintf(out, "%d\n", list->next->val);
fclose(in);
fclose(out);
}