Pagini recente » Cod sursa (job #164581) | Cod sursa (job #1281968) | Cod sursa (job #1709100) | Cod sursa (job #3033091) | Cod sursa (job #515435)
Cod sursa(job #515435)
#include<fstream>
#include<string.h>
#define dim 100005
using namespace std;
char e[dim];
long int i, lg;
void citire();
long long EvaluareExpresie();
long long EvaluareFactor();
long long EvaluareTermen();
int main()
{
ofstream g("evaluare.out");
citire();
g<<EvaluareExpresie();
g<<"\n";
g.close();
return 0;
}
void citire()
{
ifstream f("evaluare.in");
f.getline(e,dim);
lg=strlen(e);
f.close();
}
int constanta(int k)
{
int x;
x=e[k]-48;
k++;
while(e[k]>='0' && e[k]<='9')
{
x*=10; x+=(e[k]-48);
k++;i++;
}
return x;
}
long long EvaluareFactor()
{
long long fin;
if(e[i]=='(')
{
i++;
fin=EvaluareExpresie();
i++;
}
else
{
fin=constanta(i);
i++;
}
return fin;
}
long long EvaluareTermen()
{
long long fin=EvaluareFactor();
while( i<lg && ( e[i] == '*' || e[i] == '/' ))
if(e[i]=='*')
{
i++;
fin*=EvaluareFactor();
}
else
{
i++;
fin/=EvaluareFactor();
}
return fin;
}
long long EvaluareExpresie()
{
long long t=EvaluareTermen();
while( i<lg && ( e[i] == '+' || e[i]=='-' ))
if(e[i] == '+')
{
i++;
t+=EvaluareTermen();
}
else
{
i++;
t-=EvaluareTermen();
}
return t;
}