Pagini recente » Cod sursa (job #2722341) | Cod sursa (job #624656) | Cod sursa (job #853192) | Cod sursa (job #1065215) | Cod sursa (job #1561899)
#include <fstream>
using namespace std;
char a[100000], b[300000];
char s[50000];
int number[50000];
int isOperator(char x)
{
if(x == '+' || x == '-' || x == '*' || x == '/')
return true;
else return false;
}
int priority(char x)
{
if(x == '*' || x == '/')
return 2;
if(x == '+' || x == '-')
return 1;
return 0;
}
int main()
{
ofstream out("evaluare.out");
ifstream in("evaluare.in");
int size, j = 0, k = 0, t = 0;
for(size = 0; in >> a[size]; size++);
size--;
for(int i = 0; i <= size;)
{
if(48<=a[i] && a[i] <= 57)
{
while(48 <=a [i] && a[i] <= 57)
b[j++] = a[i++];
b[j++] = ' ';
}
if(a[i] == '(')
s[k++] = a[i++];
if(a[i] == ')')
{
while(k != 0 && s[k-1] != '(')
{
b[j++] = s[--k];
b[j++] = ' ';
}
i++;
}
if(isOperator(a[i]))
{
while(k != 0 && priority(s[k-1]) > priority(a[i]))
{
b[j++] = s[--k];
b[j++] = ' ';
}
s[k++] = a[i++];
}
}
while(k!=0)
{
if(s[--k] != '(')
b[j++] = s[k];
b[j++] = ' ';
}
for(int i = 0; i <= j; i++)
{
if(48 <= b[i] && b[i] <= 57)
{
int nr = 0;
while(48 <= b[i] && b[i] <= 57)
nr = nr*10 + b[i++] - '0';
number[t++] = nr;
}
if(isOperator(b[i]))
{
int nr1 = number[--t];
int nr2 = number[--t];
switch(b[i])
{
case '+': nr1 = nr1+nr2; break;
case '*': nr1 = nr1*nr2; break;
case '/': nr1 = nr2/nr1; break;
case '-': nr1 = nr2-nr1; break;
}
number[t++] = nr1;
}
}
out << number[0];
return 0;
}