Pagini recente » Cod sursa (job #1880290) | Cod sursa (job #2580495) | Cod sursa (job #865380) | Cod sursa (job #2709159) | Cod sursa (job #1294298)
//FP
#include <stdio.h>
#include <string.h>
#define NMAX 100000
FILE *fin, *fout;
char OP[NMAX], a;
int temp, p1 = 1, p2, FP[NMAX], ex[NMAX], p3;
bool check1[NMAX], check2[NMAX];
int main()
{
fin = fopen("evaluare.in", "r");
fout = fopen("evaluare.out", "w");
OP[0] = '(';
while(!feof(fin))
{
fscanf(fin, "%c", &a);
if(a <= '9' && a >= '0')
{
temp += a - '0';
temp*=10;
continue;
}
else
{
if(temp)
{
ex[p3] = temp/10;
temp = 0;
p3++;
}
ex[p3] = a;
check2[p3] = 1;
p3++;
}
}
for(int i = 0; i< p3; i++)
{
if(!check2[i])
{
FP[p2] = ex[i];
p2++;
continue;
}
if(ex[i] == '(')
{
OP[p1] = '(';
p1++;
continue;
}
if(ex[i] == '*' || ex[i] == '/')
{
while(OP[p1-1] == '*' || OP[p1-1] == '/')
{
FP[p2] = OP[p1-1];
check1[p2] = 1;
p1--;
p2++;
}
OP[p1] = ex[i];
p1++;
continue;
}
if(ex[i] == '+' || ex[i] == '-')
{
while(OP[p1-1] == '*' || OP[p1-1] == '/')
{
FP[p2] = OP[p1-1];
check1[p2] = 1;
p1--;
p2++;
}
OP[p1] = ex[i];
p1++;
}
if(ex[i] == ')')
{
while(OP[p1-1] != '(')
{
FP[p2] = OP[p1-1];
check1[p2] = 1;
p1--;
p2++;
}
p1--;
}
}
while(OP[p1-1] != '(')
{
FP[p2] = OP[p1-1];
check1[p2] = 1;
p1--;
p2++;
}
p1--;
/*for(int i = 0; i< p2; i++)
{
if(check1[i]) fprintf(fout, "%c.", FP[i]);
else fprintf(fout, "%d.", FP[i]);
}
fprintf(fout, "\n");*/
for(int i = 0; i < p2; i++)
{
if(check1[i])
{
if(FP[i] == '+')
{
FP[i] = FP[i-1] + FP[i-2];
if(i-3 >= 0) FP[i-1] = FP[i-3];
continue;
}
if(FP[i] == '-')
{
FP[i] = FP[i-2] - FP[i-1];
if(i-3 >= 0) FP[i-1] = FP[i-3];
continue;
}
if(FP[i] == '*')
{
FP[i] = FP[i-1] * FP[i-2];
if(i-3 >= 0) FP[i-1] = FP[i-3];
continue;
}
if(FP[i] == '/')
{
FP[i] = FP[i-2] / FP[i-1];
if(i-3 >= 0) FP[i-1] = FP[i-3];
continue;
}
}
}
fprintf(fout, "%d\n", FP[p2-1]);
fclose(fin);
fclose(fout);
return 0;
}