Pagini recente » Cod sursa (job #2258412) | Cod sursa (job #1670163) | Cod sursa (job #1332865) | Cod sursa (job #1568201) | Cod sursa (job #472390)
Cod sursa(job #472390)
#include <fstream>
using namespace std;
char expression[100001];
char* charIndex = expression;
long evaluate();
long factor();
long termen();
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f >> expression;
f.close();
g << evaluate() << "\n";
g.close();
return 0;
}
long factor()
{
long r = 0;
if ( *charIndex == '(' )
{
++charIndex;
r = evaluate();
++charIndex;
}
else
{
while( *charIndex >= '0' && *charIndex <= '9' )
{
r = r * 10 + *charIndex - '0';
++charIndex;
}
}
return r;
}
long termen()
{
long result = factor();
while (*charIndex == '*' || *charIndex == '/')
{
switch (*charIndex)
{
case '*':
++charIndex;
result *= factor();
break;
case '/':
++charIndex;
result /= factor();
break;
}
}
return result;
}
long evaluate()
{
long result = termen();
while( *charIndex == '+' || *charIndex == '-' )
{
switch (*charIndex)
{
case '+':
++charIndex;
result += termen();
break;
case '-':
++charIndex;
result -= termen();
break;
}
}
return result;
}