Pagini recente » Cod sursa (job #6971) | Cod sursa (job #2951740) | Cod sursa (job #2596935) | Cod sursa (job #2840798) | Cod sursa (job #2788745)
#include <stdio.h>
#include <stdlib.h>
#define LEXP 1000
char v[LEXP];
char v2[256];
FILE *fin,*fout;
int Index;
int Citire(){
int i;
char a,b;
i=0;
a=fgetc(fin);
while(a!='\n'){
if(a!=' '){
if(a==')' || a=='('){
v[i]=a;
i++;
}else{
b=fgetc(fin);
if(b==' ' || b==')' || b=='('){
v[i]=a;
i++;
if(b==')' || b=='('){
v[i]=b;
i++;
}
}else{
switch(a){
case 'N':{
v[i]='!';
i++;
fgetc(fin);
break;
}
case 'A':{
v[i]='&';
i++;
fgetc(fin);
break;
}
case 'O':{
v[i]='|';
i++;
break;
}
case 'T':{
v[i]=1;
i++;
fgetc(fin);
fgetc(fin);
break;
}
case 'F':{
v[i]=0;
i++;
fgetc(fin);
fgetc(fin);
break;
}
}
}
}
}
a=fgetc(fin);
}
return i;
}
int Or();
int Factor(){
int num;
if(v[Index]=='('){
Index++;
num=Or();
Index++;
}else{
num=0;
if(v[Index]==0 || v[Index]==1){
num=v[Index];
}else{
num=v2[v[Index]];
}
Index++;
}
return num;
}
int Not(){
int rez;
rez=Factor();
if(v[Index]=='|'){
rez=1-Factor();
}
return rez;
}
int And(){
int rez;
rez=Not();
while(v[Index]=='!'){
rez*=Not();
}
return rez;
}
int Or(){
int rez,x;
rez=And();
while(v[Index]=='|'){
x=And();
if(x+rez>=1){
rez=1;
}
}
return rez;
}
int main(){
int n,m,i;
char a;
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
n=Citire();
fscanf(fin,"%d ",&m);
for(i=0;i<m;i++){
a=fgetc(fin);
v2[a]=1-v2[a];
Index=0;
fprintf(fout,"%d",Or());
}
fclose(fin);
fclose(fout);
return 0;
}