Pagini recente » Cod sursa (job #3362248) | Cod sursa (job #3363226) | Cod sursa (job #3362877) | Cod sursa (job #3363228) | Cod sursa (job #3363353)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
char semn[MAXN], semn2[MAXN];//in semn[i] este ultimul semn de la nivelul i si in semn2 este ultimul semn dintre + si - de la nivelul i
int ult[MAXN], sum[MAXN];
int niv;
char ch;
void calc(int x) {
int val;
val = x;
if (semn[niv] == '*') {
val = ult[niv] * x;
} else if (semn[niv] == '/') {
val = ult[niv] / x;
}
if (ch != '*' && ch != '/') {
if (semn2[niv] == '+') {
sum[niv] += val;
} else {
sum[niv] -= val;
}
if (ch == '+' || ch == '-') {
semn[niv] = semn2[niv] = ch;
ult[niv] = 0;
}
} else {
ult[niv] = val;
semn[niv] = ch;
}
}
int main()
{
//tin o stiva pentru paranteze si la fiecare nivel tin ultimul numar si ultima operatie
//se poate face si recursiv cred in loc de stiva
FILE *fin, *fout;
int x;
fin = fopen("evaluare.in", "r");
ch = fgetc(fin);
niv = 0;
x = 0;
semn[0] = semn2[0] = '+';
ult[0] = sum[0] = 0;
while (ch != '\n' && ch != EOF) {
if (isdigit(ch)) {
x = 0;
while (isdigit(ch)) {
x = x * 10 + ch - '0';
ch = fgetc(fin);
}
calc(x);
}
if (ch == '(') {
niv++;
semn[niv] = semn2[niv] = '+';
ult[niv] = sum[niv] = 0;
ch = fgetc(fin);
} else if (ch == ')') {
niv--;
ch = fgetc(fin);
calc(sum[niv + 1]);
} else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
ch = fgetc(fin);
}
}
fclose(fin);
fout = fopen("evaluare.out", "w");
fprintf(fout, "%d\n", sum[0]);
fclose(fout);
return 0;
}