Pagini recente » Cod sursa (job #852226) | Cod sursa (job #2348885) | Cod sursa (job #539513) | Cod sursa (job #2551047) | Cod sursa (job #1066280)
#include <fstream>
#include <cstring>
using namespace std;
int i,n,k,t;
char s[1005];
char ch;
bool ok[200];
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool r=termen();
while(s[i]=='|')
{
i++;
if(r || termen())
r=1;
else
r=0;
}
return r;
}
bool termen()
{
bool r=factor();
while(s[i]=='&')
{
i++;
if(r && factor())
r=1;
else
r=0;
}
return r;
}
bool factor()
{
bool r;
if(s[i]=='(')
{
i++;
r=expresie();
i++;
}
else
if(s[i]=='!')
{
k=0;
while(s[i]=='!'){
i++;k++;
}
if(s[i]=='(')
{
i++;
bool rr=expresie();
if(k%2==0)
r=rr;
else
if(rr==1)
r=0;
else
r=1;
i++;
}
else
{
bool rr=ok[s[i]-'A'];
if(k%2==0)
r=rr;
else
if(rr==1)
r=0;
else
r=1;
i++;
}
}
else
{
r=ok[s[i]-'A'];
}
return r;
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
f.get(s,1005);
for(i=0;s[i]!=0;i++)
{
if(s[i]=='T' && s[i+1]=='R')
{
s[i]='1';
strcpy(s+i+1,s+i+4);
}
else
if(s[i]=='F' && s[i+1]=='A')
{
s[i]='0';
strcpy(s+i+1,s+i+5);
}
else
if(s[i]=='O' && s[i+1]=='R')
{
s[i]='|';
strcpy(s+i+1,s+i+2);
}
else
if(s[i]=='A' && s[i+1]=='N')
{
s[i]='&';
strcpy(s+i+1,s+i+3);
}
else
if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
s[i]='!';
strcpy(s+i+1,s+i+3);
}
}
for(i=0;s[i]!=0;i++)
if(s[i]==' ')
{
strcpy(s+i,s+i+1);
}
f.get();
f>>n;
f.get();
for(t=1;t<=n;t++)
{
f>>ch;
i=0;
if(ok[ch-'A'])
ok[ch-'A']=0;
else
ok[ch-'A']=1;
if(expresie())
g<<'1';
else
g<<'0';
}
f.close();g.close();
return 0;
}