Pagini recente » Cod sursa (job #386658) | Cod sursa (job #2093105) | Cod sursa (job #136707) | Cod sursa (job #1037816) | Cod sursa (job #1814858)
#include<cstdio>
#include<cstring>
const int LMAX=1001;
char s[LMAX];
int poz;
bool val['Z'-'A'];
char operatori[2][5]={"AND","OR"},constante[2][7]={"FALSE","TRUE"};
int Operator_tip()
{
for(int i=0;i<2;i++)
if(strncmp(s+poz,operatori[i],strlen(operatori[i]))==0)
return i;
return -1;
}
int Constante_tip()
{
for(int i=0;i<2;i++)
if(strncmp(s+poz,constante[i],strlen(constante[i]))==0)
return i;
return -1;
}
bool Termen();
bool Expresie()
{
bool termen=Termen();
while((s[poz]=='&' || s[poz]=='|') && s[poz]!=NULL)
{
if(s[poz]=='&')
{
poz++;
termen=termen && Termen();
}
if(s[poz]=='|')
{
poz++;
termen=termen || Termen();
}
}
return termen;
}
bool Factor()
{
bool semn=false;
while(s[poz]=='!')
{
poz++;
semn=!semn;
}
int valuare=0;
if(s[poz]=='(')
{
poz++;
valuare=Expresie();
if(semn)
valuare=!valuare;
poz++;
return valuare;
}
int tip=-1;
if(s[poz]=='0' || s[poz]=='1')
return s[poz]-'0';
for(char i='A';i<='Z';i++)
if(s[poz]==i)
return val[i-'A'];
}
bool Termen()
{
return Factor();
}
bool Is_NOT()
{
return strncmp(s+poz,"NOT",strlen("NOT"))==0;
}
int main()
{
FILE *in=fopen("bool.in","r");
fgets(s,sizeof s,in);
int n;
n=strlen(s);
if(s[n-1]=='\n')
s[n-1]=NULL;
int j=0;
for(int i=0;i<n;i++)
{
if(s[i]==' ')
continue;
int tip=0;
poz=i;
if((tip=Operator_tip())!=-1)
s[j++]=tip?'|':'&',i+=strlen(operatori[tip]);
else
{
if((tip=Constante_tip())!=-1)
s[j++]='0'+tip,i+=strlen(constante[tip]);
else
if((tip=Is_NOT()))
s[j++]='!',i+=3;
else
s[j++]=s[i];
}
}
s[j]=NULL;
fprintf(stderr,"%s ",s);
fscanf(in,"%d ",&n);
FILE *out=fopen("bool.out","w");
for(int i=1;i<=n;i++)
{
char x;
fscanf(in,"%c ",&x);
val[x-'A']=!val[x-'A'];
poz=0;
int rasp=Expresie();
fprintf(out,"%d",rasp);
}
fprintf(out,"\n");
}