Pagini recente » Cod sursa (job #374156) | Cod sursa (job #415347) | Cod sursa (job #1636242) | Cod sursa (job #2493702) | Cod sursa (job #2832713)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string expresie;
int pozitie;
double EvalExpresie();
double EvalFactor()
{
return EvalExpresie();
}
double EvalTermen()
{
double val = EvalFactor();
while (expresie[pozitie] == '*' || expresie[pozitie] == '/')
{
char op = expresie[pozitie++];
double factor = EvalFactor();
if (op == '*')
val *= factor;
else
val /= factor;
}
return val;
}
double EvalExpresie()
{
// cazul in care expresia este facuta dintr-un numar
if (expresie[pozitie]>='0' && expresie[pozitie]<='9')
{
double val = 0;
while (expresie[pozitie]>='0' && expresie[pozitie]<='9')
{
val = 10 * val + expresie[pozitie] - '0';
pozitie++;
}
return val;
}
if(expresie[pozitie] != '(')
return 0;
pozitie++;
// luam primul termen din expresie
double val = EvalTermen();
while (expresie[pozitie] != ')') {
char op = expresie[pozitie++];
double termen = EvalTermen();
if (op == '+')
val += termen;
else if (op == '-')
val -= termen;
else
return 0;
}
// trecem de ')'
pozitie++;
return val;
}
int main()
{
in >> expresie;
pozitie = 0;
expresie = "(" + expresie + ")";
double rezultat = EvalExpresie();
out << rezultat << '\n';
}