Cod sursa(job #2673062)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 15 noiembrie 2020 18:29:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <string>

using namespace std;

string sir;
int poz;

int expresie();
int termen();
int factor();

int expresie()
{
  int val = termen();

  while (sir[poz] == '+' || sir[poz] == '-') // while (poz < sir.size())
  {
    if (sir[poz] == '+')
    {
      poz++;
      val += termen();
    }
    else
    {
      poz++;
      val -= termen();
    }
  }

  return val;
}

int termen()
{
  int val = factor();

  while (sir[poz] == '*' || sir[poz] == '/') // while (poz < sir.size())
  {
    if (sir[poz] == '*')
    {
      poz++;
      val *= factor();
    }
    else
    {
      poz++;
      val /= factor();
    }
  }

  return val;
}

int factor()
{
  int val = 0;

  if (sir[poz] == '(')
  {
    poz++;
    val = expresie();
    poz++;
  }
  else
  {
    while (poz < sir.size() && '0' <= sir[poz] && sir[poz] <= '9')
    {
      val = val * 10 + (int)(sir[poz] - '0');
      poz++;
    }
  }

  return val;
}

int main()
{
  ifstream in("evaluare.in");
  ofstream out("evaluare.out");

  in >> sir;

  out << expresie();

  return 0;
}