Pagini recente » Cod sursa (job #1158428) | Cod sursa (job #2109171) | Cod sursa (job #2443365) | Cod sursa (job #2914500) | Cod sursa (job #1780077)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("bool.in");
ofstream out ("bool.out");
char s[1050];
char notf[4] = {'N','O','T'};
char andf[4]={'A','N','D'};
char orf[4]={'O','R'};
char truf[7]={'T','R','U','E'};
char falsf[7]={'F','A','L','S','E'};
int poz;
int val[35];
int crt();
bool expresie();
bool termen();
int crt()
{
int i;
bool ok=1;
for(i=0; i<=2; i++)
if(s[i+poz]!=andf[i])
ok=0;
if(ok==1)
{
poz+=4;
return 2;
}
ok=1;
for(i=0; i<=2; i++)
if(s[i+poz]!=notf[i])
ok=0;
if(ok==1)
{
poz+=6;
return !val[s[poz-2]-'A'];
}
ok=1;
for(i=0; i<=1; i++)
if(s[i+poz]!=orf[i])
ok=0;
if(ok==1)
{
poz+=3;
return 3;
}
ok=1;
for(i=0; i<=3; i++)
if(s[i+poz]!=truf[i])
ok=0;
if(ok==1)
{
poz+=5;
return 1;
}
ok=1;
for(i=0; i<=4; i++)
if(s[i+poz]!=falsf[i])
ok=0;
if(ok==1)
{
poz+=6;
return 0;
}
poz+=2;
return val[s[poz-2]-'A'];
}
bool termen()
{
bool ans;
if(s[poz]=='(')
{
poz++;
ans=expresie();
}
else
ans=crt();
return ans;
}
bool expresie()
{
bool ans=termen();
int t;
do
{
t=crt();
if(t==2)
ans=ans && termen();
else if(t==3)
ans=ans || termen();
}while(t==2 || t==3);
return ans;
}
int main()
{
int n,i;
char c;
in.get(s,1050);
in>>n;
for(i=1;i<=n;i++)
{
in>>c;
val[c-'A']=1-val[c-'A'];
poz=0;
out<<expresie();
}
return 0;
}