Pagini recente » Cod sursa (job #247302) | Cod sursa (job #1154418) | Cod sursa (job #329085) | Cod sursa (job #1971041) | Cod sursa (job #384263)
Cod sursa(job #384263)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char e[101000];
long int i,lg;
long int k=0;
void Citire();
long int eval(char);
long int Evaluare_Expresie();
long int Evaluare_Factor();
long int Evaluare_Termen();
int main()
{
Citire();
lg=strlen(e);
fout<<Evaluare_Expresie();
return 0;
}
void Citire()
{
fin.getline(e,101000);
return;
}
long int eval(char c)
{
long int sc=0;
k=i;
while(e[k]<='9' && e[k]>='0')
{
sc=sc*10+e[k]-'0';
k++;
}
return sc;
}
long int Evaluare_Factor()
{
long int f;
if(e[i]=='(')
{
i++;
f=Evaluare_Expresie();
i++;
}
else
{
f=eval(e[i]);
if(k-i>=2)
i=k;
else
i++;
}
return f;
}
long int Evaluare_Termen()
{
long int f=Evaluare_Factor();
while(i<lg && e[i]=='*')
{
i++;
f=f*Evaluare_Factor();
}
while(i<lg && e[i]=='/')
{
i++;
f=f/Evaluare_Factor();
}
return f;
}
long int Evaluare_Expresie()
{
long int t=Evaluare_Termen();
while(i<lg && e[i]=='+')
{
i++;
t+=Evaluare_Termen();}
while(i<lg && e[i]=='-')
{
i++;
t-=Evaluare_Termen();}
return t;
}