Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1663962) | Borderou de evaluare (job #1080774) | Cod sursa (job #796718)
Cod sursa(job #796718)
#include <fstream>
using namespace std;
const int Nmax = 100010;
char Str[ Nmax ];
char *p = Str;
ifstream F("eval.in");
ofstream G("eval.out");
int Fact();
int Term();
int Eval();
int Fact()
{
int Rez = 0;
if ( *p == '(' )
{
++p;
Rez = Eval();
++p;
}
else
{
for ( ; *p >= '0' && *p <= '9' ; ++p )
Rez = Rez * 10 + *p - '0';
}
return Rez;
}
int Term()
{
int Rez = Fact();
while ( *p == '*' || *p == '/' )
if ( *p == '*' )
++p , Rez *= Term() ;
else
++p , Rez /= Term();
return Rez;
}
int Eval()
{
int Rez = Term();
while ( *p == '+' || *p == '-' )
if ( *p == '+' )
++p , Rez += Term() ;
else
++p , Rez -= Term();
return Rez;
}
int main( void )
{
F.getline( Str , Nmax , '\n' );
G<<Eval()<<'\n';
return 0;
}