Pagini recente » Cod sursa (job #2624873) | Borderou de evaluare (job #779968) | Cod sursa (job #1376851) | Cod sursa (job #1904097) | Cod sursa (job #716552)
Cod sursa(job #716552)
#include <fstream>
#include <string.h>
#define NMax 100005
using namespace std;
fstream fin("evaluare.in",ios::in);
fstream fout("evaluare.out",ios::out);
char expr[NMax];
int n;
int factor(int &i);
int termen(int &i);
int expresie(int &i);
int factor(int &i)//calculeaza un numar sau o subexpresie
{
int e=0;
if(expr[i]=='(')
{
e=expresie(++i);
++i;
}
else //avem numar
{
while(expr[i]>='0'&&expr[i]<='9')
{
e=e*10+expr[i]-'0';
i++;
}
}
return e;
}
int termen(int &i)//calculeaza un termen
{
int f=factor(i);
while(expr[i]=='*'||expr[i]=='/')
{
if(expr[i]=='*')
f*=factor(++i);
if(expr[i]=='/')
f/=factor(++i);
}
return f;
}
int expresie(int &i)//aduna mai multi termeni
{
int rez=termen(i);
while(expr[i]=='+'||expr[i]=='-')
{
if(expr[i]=='+')
rez+=termen(++i);
if(expr[i]=='-')
rez-=termen(++i);
}
return rez;
}
int main()
{
int i=0;
fin.getline(expr,NMax);
n=strlen(expr);
fout<<expresie(i);
return 0;
}