Pagini recente » Cod sursa (job #1158516) | Cod sursa (job #2413267) | Cod sursa (job #1396438) | Cod sursa (job #1302431) | Cod sursa (job #2363701)
#include <fstream>
#define MAXCH 30
using namespace std;
ifstream cin( "bool.in" );
ofstream cout( "bool.out" );
string s;
int p;
bool val[MAXCH];
bool expresie();
bool numar( )
{
if( s[p]=='1' )
{
p++;
return true;
}
else if( s[p]=='0' )
{
p++;
return false;
}
else
{
p++;
return val[s[p-1]-'A'];
}
}
bool factor( )
{
bool ans;
if( s[p]=='(' )
{
p++;
ans=expresie();
p++;
}
else if( s[p]=='!' )
{
p++;
ans=!numar();
}
else
ans=numar();
return ans;
}
bool termen( )
{
bool ans=factor();
while( s[p]=='&' )
{
p++;
ans&=factor();
}
return ans;
}
bool expresie( )
{
bool ans=termen();
while( s[p]=='|' )
{
p++;
ans|=termen();
}
return ans;
}
void convert( )
{
for( int i=0;i<=s.size();i++ )
if( s[i]==' ' )
{
s.erase(i,1);
i--;
}
else if( s[i]=='N' && s[i+1]=='O' && s[i+2]=='T' )
{
s[i]='!';
s.erase(i+1,2);
}
else if( s[i]=='O' && s[i+1]=='R' )
{
s[i]='|';
s.erase(i+1,1);
}
else if( s[i]=='A' && s[i+1]=='N' && s[i+2]=='D' )
{
s[i]='&';
s.erase(i+1,2);
}
else if( s[i]=='T' && s[i+1]=='R' )
{
s[i]='1';
s.erase(i+1,3);
}
else if( s[i]=='F' && s[i+1]=='A' )
{
s[i]='0';
s.erase(i+1,4);
}
}
int main()
{
getline(cin,s);
convert();
int q;
cin>>q;
while( q-- )
{
char ch;
cin>>ch;
val[ch-'A']=!val[ch-'A'];
p=0;
cout<<expresie();
}
return 0;
}