Pagini recente » Cod sursa (job #1224814) | Cod sursa (job #2057009) | fminostress5 | Cod sursa (job #2189098) | Cod sursa (job #63869)
Cod sursa(job #63869)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char expr[1011],aux[1011],stiva[1011],pol[1001],c;
int l,i,j,top,n,eval[1000];
int prec(char op)
{
if(op=='+') return 1;
if(op=='*') return 2;
if(op=='-') return 3;
return 0;
}
int main()
{
FILE *f,*g;
f=fopen("bool.in","r");
g=fopen("bool.out","w");
fgets(aux,1002,f);
l=strlen(aux);
while(i<l-1)
{ if(aux[i]==' ')i++;
else if(aux[i]=='T'&&aux[i+1]=='R'){expr[j]='1';i=i+4;j++;}
else if(aux[i]=='F'&&aux[i+1]=='A'){expr[j]='0';i=i+5;j++;}
else if(aux[i]=='O'&&aux[i+1]=='R'){expr[j]='+';i=i+2;j++;}
else if(aux[i]=='A'&&aux[i+1]=='N'){expr[j]='*';i=i+3;j++;}
else if(aux[i]=='N'&&aux[i+1]=='O'){expr[j]='-';i=i+3;j++;}
else {expr[j]=aux[i];i++;j++;}
}
l=strlen(expr);
strcpy(aux,"");
j=0;top=-1;i=0;
while(i<l)
{ if(isalnum(expr[i]))
{pol[j]=expr[i];j++;i++;}
else
if(expr[i]=='('){top++;stiva[top]='(';i++;}
else
if(expr[i]==')')
{while(stiva[top]!='(')
{pol[j]=stiva[top];j++;top--;}
top--;
i++;
}
else
if(expr[i]=='+')
{while(stiva[top]=='*'||stiva[top]=='-')
{ pol[j]=stiva[top];j++;top--;}
top++;stiva[top]='+';i++;
}
else
if(expr[i]=='*')
{ while(stiva[top]=='-')
{ pol[j]=stiva[top];j++;top--;}
top++;stiva[top]='*';i++;
}
else
if(expr[i]=='-')
{ top++;stiva[top]='-';i++;}
}
while(top>=0)
{ pol[j]=stiva[top];j++;top--;}
l=strlen(pol);
fscanf(f,"%d",&n);
fscanf(f,"%c",&c);
for(i=1;i<=n;i++)
{ fscanf(f,"%c",&c);
top=-1;
for(j=0;j<l;j++)
{ if(isalpha(pol[j]))
{ if(toupper(pol[j])==c)
{ if(isupper(pol[j]))pol[j]=tolower(pol[j]);
else pol[j]=toupper(pol[j]);
}
top++;eval[top]=1-!islower(pol[j]);
}
else
if(isdigit(pol[j])){top++;eval[top]=pol[j]-'0';}
else
if(pol[j]=='-') eval[top]=!eval[top];
else
if(pol[j]=='*') { eval[top-1]=eval[top]&&eval[top-1];eval[top]=0;top--;}
else
if(pol[j]=='+') { eval[top-1]=eval[top]||eval[top-1];eval[top]=0;top--;}
}
fprintf(g,"%d",eval[0]);
}
fprintf(g,"\n");
fcloseall();
return 0;
}