Pagini recente » Cod sursa (job #2098382) | Cod sursa (job #2773145) | Cod sursa (job #2863134) | Cod sursa (job #2764177) | Cod sursa (job #1213908)
#include<fstream>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int i, k, v[1005], n;
char chi[1007], ch[1007], ch2;
int expresie();
int sau();
int si();
int ixor();
int expresie(){
int r=sau();
while(ch[i]=='|'){
i++;
r = (r | sau());
}
return r;
}
int sau(){
int r=si();
while(ch[i]=='&'){
i++;
r = (r & si());
}
return r;
}
int si(){
int r=ixor();
while(ch[i]=='~'){
i++;
r = (r ^ ixor());
}
return r;
}
int ixor() {
int r;
if (ch[i] == '(') {
i++;
r = expresie();
i++;
} else {
if (ch[i] == '1')
r = 1;
else
if (ch[i] == '0')
r = 0;
else
r = v[ ch[i] ];
i++;
}
return r;
}
FILE *in=fopen("bool.in","r");
ofstream out("bool.out");
int main(){
fgets(chi, 1003, in);
int x = strlen(chi);
for(i=0; chi[i]!=0; i++){
//cout<<i<<"\n";
if (chi[i] == '\n') {
ch[++k] = 0;
break;
}
if (chi[i] == ' ') {
continue;
}
if(chi[i]=='A' && chi[i+1]=='N' && chi[i+2]=='D'){
ch[++k]='&';
i+=2;
continue;
}
if(chi[i]=='O' && chi[i+1]=='R'){
ch[++k]='|';
i+=1;
continue;
}
if(chi[i]=='('){
ch[++k]=chi[i];
continue;
}
if(chi[i]==')'){
ch[++k]=chi[i];
continue;
}
if(chi[i]=='T' && chi[i+1]=='R' && chi[i+2]=='U' && chi[i+3]=='E'){
ch[++k]='1';
i+=3;
continue;
}
if(chi[i]=='F' && chi[i+1]=='A' && chi[i+2]=='L' && chi[i+3]=='S' && chi[i+4]=='E'){
ch[++k]='0';
i+=4;
continue;
}
//if(chi[i]==' '){
//i++;
//continue;
//}
if(chi[i]=='N' && chi[i+1]=='O' && chi[i+2]=='T'){
ch[++k]='1';
ch[++k]='~';
i+=2;
continue;
}
if(chi[i]>='A' && chi[i]<='Z'){
ch[++k]=chi[i];
//if(chi[i+1]==' ')
//i++;
continue;
}
}
//in>>n;
fscanf(in, "%d\n", &n);
for(;n--;){
i=1;
//in>>ch2;
fscanf(in, "%c", &ch2);
v[ch2]=(v[ch2]+1)%2;
out<<expresie();
}
out<<"\n";
//for(i=1; i<=k; i++)
// out<<ch[i];
return 0;
}