Pagini recente » Cod sursa (job #1621191) | Cod sursa (job #2426283) | Cod sursa (job #2407887) | Cod sursa (job #676634) | Cod sursa (job #532177)
Cod sursa(job #532177)
#include<stdio.h>
#include<string.h>
FILE*f=fopen("bool.in","r");
FILE*g=fopen("bool.out","w");
char v[1005],v1[1001],w[101],w1[26];
int p;
int m,j,n,i;
int termen();
int factor();
int atom();
int eval(){
int x=termen();
while(v1[p]=='|'){
++p;
x|=termen();
}
return x;
}
int termen(){
int x=factor();
while(v1[p]=='&'){
++p;
x&=factor();
}
return x;
}
int factor(){
int x=atom();
while(v1[p]=='^'){
++p;
x=1^atom();
}
return x;
}
int atom(){
int x=0;
if(v1[p]=='('){
++p;
x=eval();
++p;
}else{
if(v1[p]=='0')
x=0;
else if(v1[p]=='1')
x=1;
else
x=w1[v1[p]-'A'];
++p;
}
return x;
}
int main() {
fscanf(f,"%c",&v[i]);
while(v[i]!=10)
fscanf(f,"%c",&v[++i]);
fscanf(f,"%d\n",&n);
fscanf(f,"%s",&w);
m=i-1;
for(i=0;i<m;)
if(v[i]=='A'&&v[i+1]=='N'&&v[i+2]=='D'){
v1[++j]='&';
i+=3;
}else if(v[i]=='N'&&v[i+1]=='O'&&v[i+2]=='T'){
v1[++j]='1';
v1[++j]='^';
i+=3;
}else if(v[i]=='O'&&v[i+1]=='R'){
v1[++j]='|';
i+=2;
}else if(v[i]=='T'&&v[i+1]=='R'&&v[i+2]=='U'&&v[i+3]=='E'){
v1[++j]='1';
i+=4;
}else if(v[i]=='F'&&v[i+1]=='A'&&v[i+2]=='L'&&v[i+3]=='S'&&v[i+4]=='E'){
v1[++j]='0';
i+=5;
}else if(('A'<=v[i]&&v[i]<='Z')||v[i]=='('||v[i]==')'){
v1[++j]=v[i];
++i;
}
else
i++;
for(i=0;i<n;i++){
w1[w[i]-'A']=!w1[w[i]-'A'];
p=1;
//p++;
fprintf(g,"%d",eval());
}
fclose(g);
fclose(f);
return 0;
}