Pagini recente » Cod sursa (job #3202619) | Cod sursa (job #2428803) | Cod sursa (job #642485) | Cod sursa (job #2147555) | Cod sursa (job #1508482)
#include <stdio.h>
using namespace std;
char s[10001], q=0;
bool val[30];
/// e = t OR t OR t
/// t=f AND f AND f AND f
/// f=(e)|variabila|NOT vatiabila
///NOT>AND>OR
void skip()
{
while(s[q]==' ')
q++;
}
bool E();
bool T();
bool F();
bool E()
{
skip();
bool raspuns=T();
skip();
while(s[q]=='O' && s[q+1]=='R')
{
skip();
q+=2;
skip();
bool tmp = T();
raspuns=(raspuns || tmp);
skip();
}
return raspuns;
}
bool T()
{
skip();
bool raspuns=F();
skip();
while(s[q]=='A' && s[q+1]=='N')
{
q+=3;
skip();
bool tmp = F();
raspuns=(raspuns && tmp);
skip();
}
return raspuns;
}
bool F()
{
skip();
bool raspuns = 0;
if(s[q]=='(')
{
q++;
skip();
raspuns = E();
skip();
q++;
return raspuns;
}
if(s[q]=='N' && s[q+1]=='O')
{
q+=3;
skip();
raspuns=!F();
skip();
return raspuns;
}
if(s[q]=='T' && s[q+1]=='R')
{
q+=4;
skip();
return 1;
}
if(s[q]=='F' && s[q+1]=='A')
{
q+=5;
skip();
return 0;
}
if(val[s[q]-'A'] == 0)
{
q++;
skip();
return 0;
}
if(val[s[q]-'A'] == 1)
{
q++;
skip();
return 1;
}
}
int main()
{
FILE*fin=fopen("bool.in","r");
FILE*fout=fopen("bool.out","w");
fgets(s,1010,fin);
int n;
fscanf(fin,"%d\n", &n);
for(int i=1; i<=n; i++)
{
char c;
fscanf(fin,"%c",&c);
val[c-'A']=!val[c-'A'];
q=0;
fprintf(fout,"%d",E());
}
return 0;
}