Pagini recente » Cod sursa (job #2751756) | Cod sursa (job #170216) | Istoria paginii runda/minus/clasament | Cod sursa (job #2425985) | Cod sursa (job #2752091)
#include <bits/stdc++.h>
using namespace std;
char s[1001];
bool val[26];
char op[101];
void trans();
bool exp();
bool termen();
bool factor();
int i=0;
void trans()
{
int cnt=0,i=0;
while(s[i]!='\0')
{
if(s[i]=='T' and s[i+1]=='R')
{
s[cnt++]='1';
i+=4;
}
else if(s[i]=='F' and s[i+1]=='A')
{
s[cnt++]='0';
i+=5;
}
else if(s[i]=='N' and s[i+1]=='O')
{
s[cnt++]='!';
i+=3;
}
else if(s[i]=='A' and s[i+1]=='N')
{
s[cnt++]='&';
i+=3;
}
else if(s[i]=='O' and s[i+1]=='R')
{
s[cnt++]='|';
i++;
i++;
}
else if (s[i] != ' ')
{
s[cnt++] = s[i++];
}
else
i++;
}
s[cnt]='\0';
}
bool exp()
{
bool ori=termen();
while(s[i]=='|')
{
i++;
ori=(termen() || ori);
}
return ori;
}
bool termen()
{
bool si=factor();
while(s[i]=='&')
{
i++;
si=(factor() && si);
}
return si;
}
bool factor()
{
bool nope=false,flag;
while(s[i]=='!')
{
i++;
nope=(!nope);
}
if(s[i]=='(')
{
i++;
flag=exp();
i++;
if(nope)
return !flag;
return flag;
}
if(s[i]=='0')
{
i++;
flag = false;
}
else if(s[i]=='1')
{
i++;
flag= true;
}
else
flag = val[s[i++]-'A'];
if(nope)
return !flag;
return flag;
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
cin.getline(s,1001);
trans();
int nop;
cin>>nop;
cin>>op;
for(int j=0;j<nop;j++)
{
val[op[j]-'A'] = (!val[op[j] - 'A']);
i=0;
cout<<exp();
}
}