Pagini recente » Cod sursa (job #875856) | Cod sursa (job #1141679) | Cod sursa (job #842052) | Cod sursa (job #1138570) | Cod sursa (job #2271443)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char c,s[1501],v[15001];
int val[1501];
int i,n,cnt;
int expresie(),termen(),factor();
int expresie(){
int r=termen();
while(v[i]=='|'){
i++;
r|=termen();
}
return r;
}
int termen(){
int r=factor();
while(v[i]=='&'){
i++;
r&=factor();
}
return r;
}
int factor(){
int r;
if(v[i]=='!'){
i++;
if(v[i]=='('){
i++;
r=expresie();
i++;
}else{
r=val[v[i]];
i++;
}
return 1-r;
}else{
if(v[i]=='('){
i++;
r=expresie();
i++;
}else{
r=val[v[i]];
i++;
}
return r;
}
}
int main(){
fin.get(s,1100);
val['?']=1;
for(i=0;i<strlen(s);i++){
if(s[i]==' ')
continue;
if(s[i]=='N' && s[i+1]=='O'){
v[++cnt]='!';
i+=2;
continue;
}
if(s[i]=='A' && s[i+1]=='N'){
v[++cnt]='&';
i+=2;
continue;
}
if(s[i]=='O' && s[i+1]=='R'){
v[++cnt]='|';
i+=1;
continue;
}
if(s[i]=='T' && s[i+1]=='R'){
v[++cnt]='?';
i+=3;
continue;
}
if(s[i]=='F' && s[i+1]=='A'){
v[++cnt]='%';
i+=4;
continue;
}
v[++cnt]=s[i];
}
/*
for(i=1;i<=cnt;i++)
fout<<v[i];
fout<<"\n";
*/
fin>>n;
for(;n;n--){
fin>>c;
val[c]=1-val[c];
i=1;
fout<<expresie();
}
return 0;
}