Pagini recente » Cod sursa (job #3256747) | Cod sursa (job #1498462) | Cod sursa (job #140208) | Cod sursa (job #882951) | Cod sursa (job #584509)
Cod sursa(job #584509)
#include<fstream>
#include<string.h>
#define dim 100005
using namespace std;
char e[dim]; int i, lg;
int EvaluareExpresie();
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;
}
int EvaluareFactor() // Un factor este un numar sau o expresie intre paranteze.
{
int fin;
if(e[i]=='(')
{ i++;
fin=EvaluareExpresie();
i++; }
else
{ fin=constanta(i);
i++; }
return fin;
}
int EvaluareTermen() // Un termen este un factor sau un produs de factori
{
int fin=EvaluareFactor();
while( i<lg && ( e[i] == '*' || e[i] == '/' ))
if(e[i]=='*')
{ i++;
fin*=EvaluareFactor(); }
else
{ i++;
fin/=EvaluareFactor(); }
return fin;
}
int EvaluareExpresie() // O expresie este un numar sau un termen al unei sume.
{
int t=EvaluareTermen();
while( i<lg && ( e[i] == '+' || e[i]=='-' ))
if(e[i] == '+')
{ i++;
t+=EvaluareTermen(); }
else
{ i++;
t-=EvaluareTermen(); }
return t;
}
int main()
{
ofstream g("evaluare.out");
citire();
g<<EvaluareExpresie();
g<<"\n";
g.close();
return 0;
}