Pagini recente » Cod sursa (job #2327025) | Cod sursa (job #308307) | Cod sursa (job #263063) | Cod sursa (job #1150231) | Cod sursa (job #2974838)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in") ;
ofstream fout("bool.out") ;
string ss,s,modif ;
int n,j ;
bool val[120] ;
void simplifica()
{
int i=0 ;
while(i<ss.size())
{
if(ss[i]=='A' && ss[i+1]=='N') s+='&',i+=3 ;
else if(ss[i]=='O' && ss[i+1]=='R') s+='|',i+=2 ;
else if(ss[i]=='N' && ss[i+1]=='O') s+='!',i+=3 ;
else if(ss[i]=='T' && ss[i+1]=='R') s+='1',i+=4 ;
else if(ss[i]=='F' && ss[i+1]=='A') s+='0',i+=5 ;
else if(ss[i]!=' ') s+=ss[i],i++ ;
else i++ ;
}
}
bool eval(),termen(),factor() ;
int main()
{
getline(fin,ss) ;
fin>>n>>modif ;
simplifica() ;
for(int i=0; i<modif.size(); ++i)
{
val[modif[i]]=!val[modif[i]],j=0 ;
fout<<eval() ;
}
return 0;
}
bool eval()
{
bool cnt=factor() ;
while(s[j]=='|') j++,cnt|=factor() ;
return cnt ;
}
bool factor()
{
bool cnt=termen() ;
while(s[j]=='&') j++,cnt&=termen() ;
return cnt ;
}
bool termen()
{
bool cnt,how=1 ;
while(s[j]=='!') how=!how,j++ ;
if(s[j]=='(')
{
j++,cnt=eval(),j++ ;
if(!how) cnt=!cnt ;
return cnt ;
}
if(s[j]=='1') cnt=1,j++ ;
else if(s[j]=='0') cnt=0,j++ ;
else if(isalpha(s[j])) cnt=val[s[j]],j++ ;
if(!how) cnt=!cnt ;
return cnt ;
}
/**
A AND ((B OR NOT C) OR ((TRUE)))
A&((B|!C)|((1)))
*/