Pagini recente » Cod sursa (job #2495807) | Cod sursa (job #416835) | Cod sursa (job #1501867) | Cod sursa (job #358964) | Cod sursa (job #610936)
Cod sursa(job #610936)
#include <fstream>
#include <string>
using namespace std;
ifstream fi; // input
ofstream fo; // output
string expresie;
string::iterator it;
long suma();
long prod();
long par();
long ctol(char c)
{
return (c - 48);
}
long suma()
{
long rez = prod();
while ((*it == '+') || (*it == '-'))
{
switch (*it)
{
case '+':
++it;
rez += prod();
break;
case '-':
++it;
rez -= prod();
break;
}
}
return rez;
}
long prod()
{
long rez = par();
while ((*it == '*') || (*it == '/'))
{
switch (*it)
{
case '*':
++it;
rez *= par();
break;
case '/':
++it;
rez /= par();
break;
}
}
return rez;
}
long par()
{
long rez = 0;
if (*it == '(')
{
++it;
rez = suma();
++it; // sare peste ')'
}
else
while ((*it >= '0') && (*it <= '9'))
{
rez = rez*10 + ctol(*it);
++it;
}
return rez;
}
int main()
{
fi.open("evaluare.in");
getline(fi, expresie);
fi.close();
it = expresie.begin();
fo.open("evaluare.out");
fo << suma();
fo.close();
return 0;
}