Pagini recente » Cod sursa (job #691806) | Cod sursa (job #2227468) | Cod sursa (job #221435) | Cod sursa (job #971366) | Cod sursa (job #2058324)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int n, i, j, p, x;
bool v[30];
char s[1000], c[100];
bool evaluare();
bool NOT()
{
bool r=0;
bool k=0;
while(s[p]=='N' && s[p+1]=='O')
{
p+=3;
if(k==0)
k=1;
else k=0;
while(s[p]==' ')
p++;
}
if(s[p]=='(')
{
p++;
r=evaluare();
p++;
while(s[p]==' ')
p++;
}
if(s[p]=='T' && s[p+1]=='R')
{
p+=4;
r=1;
}
else if(s[p]=='F')
{
p+=5;
r=0;
}
else if(s[p]>='A' && s[p]<='Z' && (s[p+1]<'A' || s[p+1]>'Z'))
{
int x=(int)s[p]-64;
r=v[x];
p++;
}
while(s[p]==' ')
p++;
if(k==1)
if(r==0)
r=1;
else if(r==1)
r=0;
return r;
}
bool AND()
{
//while(s[p]==' ')
//p++;
bool r=NOT();
while(s[p]=='A')
{
p+=3;
while(s[p]==' ')
p++;
if(!(NOT()==1 && r==1))
r=0;
}
if(s[p]=='T' && s[p+1]=='R')
{
p+=4;
r=1;
}
else if(s[p]=='F')
{
p+=5;
r=0;
}
else if(s[p]>='A' && s[p]<='Z' && (s[p+1]<'A' || s[p+1]>'Z'))
{
int x=(int)s[p]-64;
r=v[x];
p++;
}
return r;
}
bool evaluare()
{
while(s[p]==' ')
p++;
bool r=AND();
while(s[p]=='O' && s[p+1]=='R')
{
p+=2;
while(s[p]==' ')
p++;
if(AND()==1 || r==1)
r=1;
else r=0;
}
return r;
}
int main()
{
f.get(s,1000);
f>>n;
for(i=0;i<n;i++)
f>>c[i];
for(i=0;i<n;i++)
{
x=c[i]-64;
if(v[x]==1)
v[x]=0;
else v[x]=1;
p=0;
g<<evaluare();
}
return 0;
}