Pagini recente » Cod sursa (job #1401556) | Cod sursa (job #356782) | Cod sursa (job #2489836) | Cod sursa (job #2539895) | Cod sursa (job #631297)
Cod sursa(job #631297)
#include<fstream>
#include<string.h>
#include<iostream>
using namespace std;
struct{char ns; int v;} TS[200];
char e[200];
int i,lg;
void Citire();
int eval(char);
int EvaluareExpresie();
int EvaluareFactor();
int EvaluareTermen();
int main()
{
ofstream g("evaluare.out");
Citire();
g<<EvaluareExpresie();
return 0;}
void Citire()
{
ifstream fin("evaluare.in");
int NrS=0;
fin.getline(e,200); lg=strlen(e);
while(!fin.eof())
{
fin>>TS[NrS].ns>>TS[NrS].v;
NrS++;
}
fin.close();
}
int eval(char c)
{
int k=0;
if(c>='0'&&c<='9')
{
while(c>='0'&&c<='9')
{k=k*10+(c-'0');
i++;
c=e[i];
}
i--;
return k;
}
for(k=0;TS[k].ns!=c;k++);
return TS[k].v;
}
int EvaluareFactor()
{
int f=0;
if(e[i]=='(')
{
i++;
f=EvaluareExpresie();
i++;
}
else
{
f=eval(e[i]);
i++;
}
return f;
}
int EvaluareTermen()
{
int f=EvaluareFactor();
if(e[i]=='*')
while(i<lg&&e[i]=='*')
{
i++;
f*=EvaluareFactor();
}
if(e[i]=='/')
while(i<lg&&e[i]=='/')
{
i++;
f/=EvaluareFactor();
}
return f;
}
int EvaluareExpresie()
{
int t=EvaluareTermen();
if(e[i]=='+')
while(i<lg&&e[i]=='+')
{
i++;
t+=EvaluareTermen();
}
if(e[i]=='-')
while(i<lg&&e[i]=='-')
{
i++;
t-=EvaluareTermen();
}
return t;
}