Cod sursa(job #63856)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 31 mai 2007 10:21:27
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#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(expr[i]>='A'||expr[i]=='1'||expr[i]=='0')
	   {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(stiva[top]=='('){top++;stiva[top]=expr[i];i++;}
	       else
		if(prec(expr[i])>prec(stiva[top]))
		 { top++;stiva[top]=expr[i];i++;}
		  else
		   { pol[j]=expr[i];i++;j++;}
	}
	while(top>=0)
	{ pol[j]=stiva[top];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;
}