Pagini recente » Cod sursa (job #3142811) | Cod sursa (job #195026) | Cod sursa (job #195027) | Cod sursa (job #195096) | Cod sursa (job #879194)
Cod sursa(job #879194)
#include <cstdio>
#include <cstring>
#include <ctype.h>
#define MAXN 256
using namespace std;
int n, i;
char e[MAXN];
void read ();
void write (int);
int eval (int);
int expresie ();
int termen ();
int factor ();
int main () {
read ();
write (expresie ());
return 0;
}
void read () {
freopen ("evaluare.in", "r", stdin);
gets (e);
fclose (stdin);
n = strlen (e);
}
void write (int k) {
freopen ("evaluare.out", "w", stdout);
printf ("%d\n", k);
fclose (stdout);
}
int eval () {
int nr = 0;
while (isdigit(e[i]))
nr = nr*10 + (e[i++]-'0');
// printf ("%d ", nr);
return nr;
}
int factor () {
int f;
if (e[i] == '(') {
++i;
f = expresie ();
++i;
}
else f = eval ();
return f;
}
int termen () {
int f = factor ();
while (i<n && (e[i]=='*' || e[i]=='/')) {
++i;
f = (e[i-1]=='*') ? (f*factor()) : (f/factor()) ;
}
return f;
}
int expresie () {
int t = termen ();
while (i<n && (e[i]=='+' || e[i]=='-')) {
++i;
t = (e[i-1]=='+') ? (t+termen()) : (t-termen());
}
return t;
}