Pagini recente » Cod sursa (job #343135) | Cod sursa (job #174293) | Cod sursa (job #1146763) | Cod sursa (job #3127644) | Cod sursa (job #142211)
Cod sursa(job #142211)
#include<stdio.h>
#include<string.h>
char aux[1100],reg[110];
int l,i,j,n,sol,cc,poz,c[1100],val[60],fr[60];
int variabila();
int pard();
int negatie();
int conjunctie();
int disjunctie();
int main()
{
FILE *f,*g;f=fopen("bool.in","r");g=fopen("bool.out","w");
fgets(aux,1001,f);l=strlen(aux);
while(i<l)
{ if(aux[i]=='T'&&aux[i+1]=='R'){c[j]=1;i=i+4;j++;}//TRUE=1
else if(aux[i]=='F'&&aux[i+1]=='A'){c[j]=0;i=i+5;j++;}//FALSE=0;
else if(aux[i]=='O'&&aux[i+1]=='R'){c[j]=40;i=i+2;j++;}//OR=40
else if(aux[i]=='A'&&aux[i+1]=='N'){c[j]=41;i=i+3;j++;}//AND=41
else if(aux[i]=='N'&&aux[i+1]=='O'){c[j]=42;i=i+3;j++;}//NOT=42
else if(aux[i]==')'){c[j]=50;i++;j++;}// )=50
else if(aux[i]=='('){c[j]=51;i++;j++;}// (=51
else if(aux[i]>='A'&&aux[i]<='Z'){c[j]=(int)(aux[i]-'A'+2);fr[c[j]]=1;i++;j++;}
else i++;
}
val[1]=1;
fscanf(f,"%d",&n);
fscanf(f,"%s",reg);
sol=variabila();
for(i=0;i<n;i++)
{ cc=(int)(reg[i]-'A'+2);
val[cc]=1-val[cc];poz=0;sol=disjunctie();
fprintf(g,"%d",sol);
}
fprintf(g,"\n");
fcloseall();
return 0;
}
int variabila()
{
int aux;
if(c[poz]<40){aux=val[c[poz]];poz++;}
else aux=negatie();
return aux;
}
int negatie()
{
int aux;
if(c[poz]==42)
{ if(c[poz+1]!=42){poz++;aux=!variabila();}
else {poz+=2;aux=variabila();}
}
else aux=pard();
return aux;
}
int pard()
{
int aux=0;
if(c[poz]==51)
{ poz++;aux=disjunctie();poz++;}
else aux=disjunctie();
return aux;
}
int conjunctie()
{
int aux;
aux=variabila();
while(c[poz]==41)
{ poz++;aux&=variabila();}
return aux;
}
int disjunctie()
{
int aux;
aux=conjunctie();
while(c[poz]==40)
{ poz++;aux|=conjunctie();}
return aux;
}