Pagini recente » Monitorul de evaluare | Cod sursa (job #144865) | christmas-balls | Cod sursa (job #228434) | Cod sursa (job #194664)
Cod sursa(job #194664)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define IN "evaluare.in"
#define OUT "evaluare.out"
#define MAXN 100001
char lg[MAXN];
int length;
class Node
{ public:
char type; //n, + -
int info; //number
Node *st,*dr;
};
bool isdigit(char c) {return (c>='0' && c<='9');}
int ExtrageNumar(int &i)
{
int nr = 0;
while(isdigit(lg[i]))
nr=nr * 10 + (lg[i++] - '0');
return nr;
}
int EvaluateArbore(int &i);
int EvaluateTermen(int &i);
int EvaluateFactor(int &i)
{
int p=0;
if (lg[i] == '(')
{
++i;
p=EvaluateArbore(i);
i++;
return p;
}
return ExtrageNumar(i);
}
int EvaluateTermen(int &i)
{
int r=0;
r += EvaluateFactor(i);
if (i >= length || (lg[i]!='*' && lg[i]!='/'))
return r;
else
{
switch(lg[i++])
{
case '*':
r *= EvaluateTermen(i);
break;
case '/':
r /= EvaluateTermen(i);
break;
}
}
return r;
}
int EvaluateArbore(int &i)
{
if (i >= length) return 0;
long r = EvaluateTermen(i);
while(1)
{
if (i >= length || lg[i] == ')')
return r;
switch(lg[i++])
{
case '+':
r += EvaluateTermen(i);
break;
case '-':
r -= EvaluateTermen(i);
break;
}
}
}
void read()
{
FILE *f=fopen(IN,"r");
fscanf(f,"%s",&lg);
length = strlen(lg);
fclose(f);
}
int main()
{
read();
int v=0;
FILE *f=fopen(OUT,"w");
fprintf(f,"%d\n",EvaluateArbore(v));
fclose(f);
return 0;
}