Pagini recente » Cod sursa (job #2499992) | Cod sursa (job #1599582) | Cod sursa (job #1363257) | Cod sursa (job #1470936) | Cod sursa (job #2526129)
#include <iostream>
#include <fstream>
#define LMAX 100001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int evaluate(char* &expr);
int operand(char* &expr);
int value(char* &expr);
int ADD_SUBSTRACT(char*& expr);
int MULTIPLY_DIVIDE(char* &expr);
char s[LMAX];
int main()
{
char *expr;
fin >> s;
expr = s;
fout << evaluate(expr);
return 0;
}
int evaluate(char* &expr)
{
return ADD_SUBSTRACT(expr);
}
int ADD_SUBSTRACT(char*& expr)
{
auto result = MULTIPLY_DIVIDE(expr);
while (expr[0] == '+' || expr[0] == '-')
{
switch (expr[0])
{
case '+':
result += MULTIPLY_DIVIDE(++expr);
break;
case '-':
result -= MULTIPLY_DIVIDE(++expr);
break;
default:
break;
}
}
return result;
}
int MULTIPLY_DIVIDE(char* &expr)
{
auto result = operand(expr);
while (expr[0] == '*' || expr[0] == '/')
{
switch (expr[0])
{
case '*':
result *= operand(++expr);
break;
case '/':
result /= operand(++expr);
break;
default:
break;
}
}
return result;
}
int operand(char* &expr)
{
if (expr[0] == '(')
{
auto result = evaluate(++expr);
expr++;
return result;
}
else
{
return value(expr);
}
}
int value(char* &expr)
{
int nr = 0;
while (isdigit(expr[0]))
{
nr = nr * 10 + (expr[0] - '0');
expr++;
}
return nr;
}