Pagini recente » Cod sursa (job #2212718) | Cod sursa (job #1142141) | Cod sursa (job #1097914) | Cod sursa (job #921618) | Cod sursa (job #1028514)
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char c[1020], s[1020], m[110], *p;
int i,k,n,j;
int v[100];
int termen1 ();
int termen2 ();
int termen3 ();
int termen4 ();
int termen1 () {
int r=termen2 ();
while (*p== '|' ) {
p++;
r |= termen2();
}
return r;
}
int termen2 () {
int r=termen3 ();
while (*p=='&') {
p++;
r &= termen3();
}
return r;
}
int termen3 () {
int r=termen4();
if (*p=='!') {
p++;
//r=termen4();
if (r!=2)
r=(!termen4());
else
r=(!termen3());
}
return r;
}
int termen4 () {
int r;
if (*p=='(') {
p++;
r=termen1();
p++;
}else {
if (*p>='A' && *p<='Z' ) {
r=v[*p-'A'];
p++;
}else {
r=*p-'0';
p++;
}
}
return r;
}
int main () {
fin.get (s,1000);
fin.get ();
k=-1;
while (s[i]=='('){
c[++k]='(';
i++;
}
for (;s[i]!=0;) {
if (((s[i]>='A'&&s[i]<='Z'))&& !(s[i+1]>='A'&&s[i+1]<='Z')){
c[++k]=s[i];
i++;
}else
if (s[i]=='N'){
c[++k]='2';
c[++k]='!';
i+=3;
}else
if (s[i]=='T'){
c[++k]='1';
i+=4;
}else
if (s[i]=='F'){
c[++k]='0';
i+=4;
}else
if (s[i]=='('){
c[++k]='(';
i++;
}else
if (s[i]==')'){
c[++k]=')';
i++;
}else
if (s[i]=='O'){
c[++k]='|';
i+=2;
}else {
if (s[i]=='A'){
c[++k]='&';
i+=3;
}
else
i++;
}
}
fin>>n;
fin>>m;
//fout<<c+1<<"\n";
for (j=0;j<n;j++) {
v[m[j]-'A']=(v[m[j]-'A']^1);
p=c;
fout<<termen1();
}
return 0;
}