Pagini recente » Cod sursa (job #3267197) | Cod sursa (job #2038661) | Cod sursa (job #1026264) | Cod sursa (job #2969480) | Cod sursa (job #1415819)
#include<cstdio>
#include<cctype>
#include<cstring>
bool EROARE=false;
/*
Gramatica:
Expr -> Term (('+'|'-')Term)*
Term -> Fact (('*'|'/')Fact)*
Fact -> Int | ('+'|'-')Fact|'('Expr')'
Int -> ('0'|'1'|'2'|...|'9')+
*/
char sir[100001];
int cursor;
int Expresie();
int Factor()
{
int rez=0;
if(isdigit(sir[cursor]))
{
rez=rez*10+(sir[cursor++]-'0');
while(isdigit(sir[cursor]))
{
rez=rez*10+(sir[cursor++]-'0');
}
}
else
if(sir[cursor]=='(')
{
cursor++;
rez=Expresie();
if(sir[cursor]!=')')
EROARE=true;
else
cursor++;
}
else
{
if(sir[cursor]=='-')
rez=-1;
cursor++;
rez*=Factor();
}
return rez;
}
int Termen()
{
int rez=Factor();
while(sir[cursor]=='*' || sir[cursor]=='/')
{
if(sir[cursor++]=='*')
{
rez*=Factor();
}
else
{
rez/=Factor();
}
}
return rez;
}
int Expresie()
{
int rez=Termen();
while(sir[cursor]=='+' || sir[cursor]=='-')
{
if(sir[cursor++]=='+')
{
rez+=Termen();
}
else
{
rez-=Termen();
}
}
return rez;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(sir);
printf("%d ",Expresie());
return 0;
}