Pagini recente » Cod sursa (job #1835692) | Cod sursa (job #3966) | Cod sursa (job #3143068) | Cod sursa (job #1259034) | Cod sursa (job #2137220)
#include <stdio.h>
#include <stdlib.h>
char cuv[6];
char v[1000];
char val[26];
int k;
char v1[4]= {'T','R','U','E'};
char v2[5]= {'F','A','L','S','E'};
char v3[3]= {'N','O','T'};
char v4[3]= {'A','N','D'};
char v5[2]= {'O','R'};
int expresie();
int factor();
int expresie()
{
int sum=factor();
while(v[k]=='&' || v[k]=='|')
{
if(v[k]=='&')
{
k++;
sum=sum&factor();
}
else
{
k++;
sum=sum|factor();
}
}
return sum;
}
int factor()
{
int vl,semn=1;
while(v[k]=='!')
{
semn*=-1;
k++;
}
if(v[k]=='(')
{
k++;
vl=expresie();
k++;
if(semn==1)return vl;
else return !vl;
}
if(v[k]=='t')
{
k++;
if(semn==1)return 1;
return 0;
}
else if(v[k]=='f')
{
k++;
if(semn==1)
return 0;
return 1;
}
if(v[k]>='A' && v[k]<='Z')
{
vl=val[v[k]-'A'];
k++;
if(semn==1)return vl;
return !vl;
}
}
int vcuv()
{
int i,x=1;
for(i=0; i<4; i++)
{
if(cuv[i]!=v1[i])x=0;
}
if(x==1)return 1;
x=1;
for(i=0; i<5; i++)
{
if(cuv[i]!=v2[i])x=0;
}
if(x==1)return 2;
x=1;
for(i=0; i<3; i++)
{
if(cuv[i]!=v3[i])x=0;
}
if(x==1)return 3;
x=1;
for(i=0; i<3; i++)
{
if(cuv[i]!=v4[i])x=0;
}
if(x==1)return 4;
x=1;
for(i=0; i<2; i++)
{
if(cuv[i]!=v5[i])x=0;
}
if(x==1)return 5;
return 0;
}
int main()
{
int len=0,q=0,r,n,i;
char c;
FILE*fi,*fo;
fi=fopen("bool.in","r");
fo=fopen("bool.out","w");
c=fgetc(fi);
while(c!='\n' && c!=EOF)
{
while(c>='A' && c<='Z')
{
cuv[len]=c;
len++;
c=fgetc(fi);
}
if(len!=0)
{
r=vcuv();
if(r==1)
{
v[q]='t';
q++;
}
else if(r==2)
{
v[q]='f';
q++;
}
else if(r==3)
{
v[q]='!';
q++;
}
else if(r==4)
{
v[q]='&';
q++;
}
else if(r==5)
{
v[q]='|';
q++;
}
else
{
v[q]=cuv[0];
q++;
}
}
if(c!=' ')
{
v[q]=c;
q++;
}
len=0;
c=fgetc(fi);
}
fscanf(fi,"%d",&n);
fgetc(fi);
for(i=0;i<n;i++){
c=fgetc(fi);
val[c-'A']=!val[c-'A'];
k=0;
fprintf(fo,"%d",expresie());
}
fclose(fi);
fclose(fo);
return 0;
}