Pagini recente » Cod sursa (job #3147972) | Cod sursa (job #523009) | Cod sursa (job #3269609) | Cod sursa (job #1162722) | Cod sursa (job #1586389)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int n;
string s;
string ::iterator p;
char k;
bitset <150> x;
bool Adunare();
bool Inmultire();
bool Valuare();
bool Adunare()
{
bool c=Inmultire();
while(*p == '|' )
{
p++;
c|=Inmultire();
}
return c;
}
bool Inmultire()
{
bool c=Valuare();
while(*p == '&')
{
p++;
c &= Valuare();
}
return c;
}
bool Valuare()
{
bool c=0;
if(*p == '!')
while(*p == '!'){
p++;
c = !Valuare();
}
else
{
if(*p == '('){
p++;
c = Adunare();
p++;
}
else if((*p >= 'A' && *p <= 'Z') || *p == 't' || *p == 'f')
c = x[*p],p++;
}
return c;
}
int main()
{
getline(in,s);
p=s.begin();
for(int i=0 ; i< s.size();i++)
{
if(s[i] == ' ')
s.erase(s.begin() + i);
if(s[i] == 'A' && s[i+1] == 'N')
s[i]='&',s.erase(s.begin()+i, s.begin()+ i+3);
if(s[i] == 'O' && s[i+1] == 'R')
s[i]='|',s.erase(s.begin()+i, s.begin()+ i+2);
if(s[i] == 'N' && s[i+1] == 'O')
s[i]= '!', s.erase(s.begin()+i, s.begin()+i+3);
if(s[i] == 'T' && s[i+1] == 'R')
s[i]='t',s.erase(s.begin()+i, s.begin()+i+4);
if(s[i]=='F' && s[i+1] == 'A')
s[i]='f',s.erase(s.begin()+i, s.begin()+i+5);
}
x['t']=1;
in>>n;
for(int i=1;i<=n;i++)
{
in>>k;
x[k]=!x[k];
p = s.begin();
out<<Adunare();
}
return 0;
}