Pagini recente » Cod sursa (job #507144) | Cod sursa (job #450900) | Cod sursa (job #108226) | Cod sursa (job #971787) | Cod sursa (job #2929375)
#include <fstream>
using namespace std;
ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");
char e[100005];
int i;
int expresie();
int termen();
int factor();
int calculate();
/// a este rezultatul operatiei
int expresie()
{
int a = termen() ;
while( e[i]== '+' || e[i]=='-' )
{
if ( e[i] == '+' )
{
i ++ ;
a += termen() ;
}
if( e[i] == '-' )
{
i ++ ;
a -= termen();
}
}
return a;
}
int termen()
{
int a = factor() ;
while( e[i] == '*' || e[i] == '/' )
{
if( e[i] == '/' )
{
i ++ ;
a /= factor() ;
}
else /// daca e[i] == '*'
{
i ++ ;
a *= factor();
}
}
return a;
}
int factor()
{
int a;
if ( e[i] == '(' )
{
i ++ ;
a = expresie() ;
i ++ ;
}
else
a = calculate() ;
return a ;
}
int calculate()
{
int a = 0 ;
while( e[i] >= '0' && e[i]<='9')
{
a = a * 10 + ( e[i] - '0' ) ;
i ++ ;
}
return a;
}
int main()
{
cin >> e ;
i = 0 ;
cout << expresie() ;
}