Pagini recente » Cod sursa (job #3151305) | Cod sursa (job #720257) | Cod sursa (job #2089724) | Cod sursa (job #919325) | Cod sursa (job #1610405)
#include <iostream>
#include <fstream>
#include <vector>
#include <ctype.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string a;
int n;
int fadunascade (int &poz);
int getNumber(int &poz)
{
int nr = 0;
while (isdigit(a[poz]))
{
nr = nr * 10 + (int)a[poz] - 48;
poz++;
}
return nr;
}
int finmul(int &poz, int prod, int type)
{
while (poz <= n)
{
int nr = 0;
if (isdigit(a[poz]))
nr = getNumber(poz);
else if (a[poz] == '(') {
poz++;
nr = fadunascade(poz);
}
if (type == 1)
prod *= nr;
else
prod /= nr;
if (a[poz] == '+' || a[poz] == '-')
return prod;
if (a[poz] == '*')
type = 1;
else type = -1;
if (a[poz] == ')')
return prod;
poz++;
}
return prod;
}
int fadunascade (int &poz)
{
int sum = 0, semn = 1;
if (a[poz] == '-')
{
semn = -1;
poz++;
}
while (poz <= n)
{
int nr = 0;
if (isdigit(a[poz]))
nr = getNumber(poz);
else if (a[poz] == '(') {
poz++;
nr = fadunascade(poz);
}
if (a[poz] == '*' || a[poz] == '/'){
if (a[poz] == '*')
sum += semn * finmul(++poz, nr, 1);
else
sum += semn * finmul(++poz, nr, -1);
}
else
sum += semn * nr;
if (a[poz] == '+')
semn = 1;
else semn = -1;
if (a[poz] == ')') {
++poz;
return sum;
}
poz++;
}
return sum;
}
int main()
{
fin >> a;
n = a.size() - 1;
int poz = 0;
fout << fadunascade(poz);
return 0;
}