Pagini recente » Cod sursa (job #2116510) | Cod sursa (job #57194) | Borderou de evaluare (job #2057654) | Borderou de evaluare (job #804979) | Cod sursa (job #2852386)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int contor;
string operatii;
int concat(int &poz);
int termen1(int &poz);
int termen2(int &poz);
int evaluare(int &poz);
int concat(int &poz)
{
int numar0 = 0;
while (isdigit(operatii[poz]))
numar0 = (operatii[poz++] -'0') + numar0 * 10;
return numar0;
}
int termen1(int &poz)
{
int numar1 = 0;
if (operatii[poz] == '(')
{
poz++;
numar1 = evaluare(poz);
poz++;
}
else
numar1 = concat(poz);
return numar1;
}
int termen2(int &poz)
{
int numar2 = termen1(poz);
while (operatii[poz] == '*' || operatii[poz] == '/')
{
if (operatii[poz] == '*')
{
poz++;
numar2 *= termen1(poz);
}
else if (operatii[poz] == '/')
{
poz++;
numar2 /= termen1(poz);
}
}
return numar2;
}
int evaluare(int &poz)
{
int rezultat = termen2(poz);
while (operatii[poz] == '-' || operatii[poz] == '+')
{
if (operatii[poz] == '+')
{
poz++;
rezultat += termen2(poz);
}
else if (operatii[poz] == '-')
{
poz++;
rezultat -= termen2(poz);
}
}
return rezultat;
}
int main()
{
fin >> operatii;
int rasp = evaluare(contor);
fout << rasp << "\n";
return 0;
}