Cod sursa(job #1250668)
Utilizator | Data | 28 octombrie 2014 13:05:03 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 5.97 kb |
#include <stdio.h>
FILE *fin, *fout;
int *elemente, p1=0, p2 = 1, temp;
char *operatori, ch = 'r';
bool inmultire, impartire;
int main()
{
fin = fopen("evaluare.in", "r");
fout = fopen("evaluare.out", "w");
elemente = new int[10000];
operatori = new char[10000];
operatori[0] = '(';
while (fscanf(fin, "%c", &ch) != EOF)
{
if(ch >= '0' && ch <= '9')
{
if(temp)
{
temp*=10;
temp+=(int)(ch-'0');
}
else
{
temp = (int)(ch - '0');
}
}
else
{
if(temp)
{
elemente[p1] = temp;
temp = 0;
p1++;
if(inmultire == 1)
{
p1--;p2--;
elemente[p1-1] = elemente[p1-1]*elemente[p1];
inmultire = 0;
}
if(impartire == 1)
{
p1--;p2--;
elemente[p1-1] = elemente[p1-1]/elemente[p1];
impartire = 0;
}
}
if(inmultire == 1) inmultire = 0;
if(impartire == 1) impartire = 0;
if(ch == '+')
{
operatori[p2] = '+';
p2++;
if(operatori[p2-2] == '+')
{
p1--;
elemente[p1-1] = elemente[p1-1] + elemente[p1];
p2--;
operatori[p2] = operatori[p2+1];
}
if(operatori[p2-2] == '-')
{
p1--;
elemente[p1-1] = elemente[p1-1] - elemente[p1];
p2--;
operatori[p2] = operatori[p2+1];
}
}
if(ch == '-')
{
operatori[p2] = '-';
p2++;p1--;
if(operatori[p2-2] == '+')
{
p1--;
elemente[p1-1] = elemente[p1-1] + elemente[p1];
}
if(operatori[p2-2] == '-')
{
p1--;
elemente[p1-1] = elemente[p1-1] - elemente[p1];
}
p2--;
operatori[p2] = operatori[p2+1];
}
if(ch == '*')
{
inmultire = 1;
operatori[p2] = '*';
p2++;
}
if(ch == '/')
{
impartire = 1;
operatori[p2] = '/';
p2++;
}
if(ch == '(')
{
operatori[p2] = '(';
p2++;
}
if(ch == ')')
{
operatori[p2] = ')';
p2++;
p1--;
if(operatori[p2-2] == '+') elemente[p1-1] = elemente[p1-1] + elemente[p1];
if(operatori[p2-2] == '-') elemente[p1-1] = elemente[p1-1] - elemente[p1];
p2-=3;
if(operatori[p2-1] == '*')
{
elemente[p1-2] = elemente[p1-2]*elemente[p1-1];
p1--;
p2--;
}
if(operatori[p2-1] == '/')
{
elemente[p1-2] = elemente[p1-2]/elemente[p1-1];
p1--;
p2--;
}
}
}
}
if(temp)
{
elemente[p1] = temp;
temp = 0;
p1++;
if(inmultire == 1)
{
p1--;p2--;
elemente[p1-1] = elemente[p1-1]*elemente[p1];
inmultire = 0;
}
if(impartire == 1)
{
p1--;p2--;
elemente[p1-1] = elemente[p1-1]/elemente[p1];
impartire = 0;
}
}
operatori[p2] = ')';
p2++;
p1--;
if(operatori[p2-2] == '+') elemente[p1-1] = elemente[p1-1] + elemente[p1];
if(operatori[p2-2] == '-') elemente[p1-1] = elemente[p1-1] - elemente[p1];
p2-=3;
/*fprintf(fout, "%d %d\n", p1, p2);
for(int i =0; i< p1; i++) fprintf(fout, "%d ", elemente[i]);
fprintf(fout, "\n");
for(int i =0; i< p2; i++) fprintf(fout, "%c ", operatori[i]);
fprintf(fout, "\n");*/
fprintf(fout, "%d\n", elemente[0]);
return 0;
}