Pagini recente » Cod sursa (job #242455) | Cod sursa (job #1032108) | Cod sursa (job #2907615) | Cod sursa (job #1843967) | Cod sursa (job #1849742)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char S[1010],v[1010],w[101],c;
int n,m;
int preluc (int n){
int k=0;
for(int i=0;i<n;i++){
if(S[i]=='A' && S[i+1]=='N' && S[i+2]=='D')
v[++k]='&',i+=2;
else
if(S[i]=='F' && S[i+1]=='A')
v[++k]=0,i+=4;
else
if(S[i]=='T' && S[i+1]=='R')
v[++k]=1,i+=3;
else
if(S[i]=='(')
v[++k]='(';
else
if(S[i]==')')
v[++k]=')';
else
if(S[i]=='N' && S[i+1]=='O')
v[++k]='!',i+=2;
else
if(S[i]=='O' && S[i+1]=='R')
v[++k]='|',i++;
else
if(S[i]==' ')
continue;
else{
v[++k]=S[i];
}
}
}
int expresie ();
int termen ();
int factor ();
int main (){
fin.get(S,1010);
n=strlen(S);
preluc(n);
fin>>m;
for(int k=1;k<=m;k++){
fin>>c;
n=1;
w[c-'A']=1-w[c-'A'];
fout<<expresie();
}
}
int expresie () {
int val=termen();
while(v[n]=='|'){
n++;
val|=termen();
}
return val;
}
int termen () {
int val=factor();
while(v[n]=='&'){
n++;
val&=factor();
}
return val;
}
int factor () {
int val=0;
if(v[n]=='!'){
val=1-val;
n+=2;
return val;
}
if(v[n]==1){
val=1;
n++;
return val;
}
if(v[n]==0){
val=0;
n++;
return val;
}
if(v[n]=='('){
n++;
val=expresie();
n++;
return val;
}
n++;
return w[v[n-1]-'A'];
}