Pagini recente » Cod sursa (job #1616528) | Cod sursa (job #1189218) | Cod sursa (job #1462911) | Cod sursa (job #1630807) | Cod sursa (job #1595705)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int expresie();
int termen();
int factor();
bool vc[26];
char si[1000];
char s[1000];
int p;
int expresie()
{
int val = termen();
while( s[p] == '|')
{
++p;
val |= termen();
}
return val;
}
int termen()
{
int val = factor();
while(s[p] == '&')
{
++p;
val &= factor();
}
return val;
}
int factor()
{
int val = 0, _not = 0;
if(s[p] == '!')
{
++p;
_not = 1;
}
if(s[p] == '(')
{
++p;
val = expresie();
++p;
if(_not == 1)
return !val;
return val;
}
if(s[p] == '1')
{
++p;
if(_not == 1)
return 0;
return 1;
}
if(s[p] == '0')
{
++p;
if(_not == 1)
return 1;
return 0;
}
++p;
if(_not == 1)
return !vc[s[p-1] - 'A'];
return vc[s[p-1] - 'A'];
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n,i,l,k=0;
gets(si);
l = strlen(si);
for(i=0; i<l; ++i)
{
if(!isspace(s[i])){
if(si[i] >= 'A' && si[i] <= 'Z')
{
if(si[i] == 'A' && si[i+1] == 'N')
{
s[k++] = '&';
i+=2;
}
else
if(si[i] == 'O' && si[i+1] == 'R')
{
s[k++] = '|';
i++;
}
else
if(si[i] == 'N' && si[i+1] == 'O')
{
s[k++] = '!';
i+=2;
}
else if(si[i] == 'T' && si[i+1] == 'R')
{
s[k++] = '1';
i+=3;
}
else if(si[i] == 'F' && si[i+1] == 'A')
{
s[k++] = '0';
i+=4;
}
else
{
s[k++] = si[i];
}
}
else
if(si[i] == '(' || si[i] == ')')
s[k++] = si[i];
}
}
s[k] = '\0';
int ch;
char chc;
scanf("%d\n",&ch);
for(i=1; i<=ch; ++i)
{
scanf("%c",&chc);
vc[chc - 'A'] = !vc[chc - 'A'];
p=0;
printf("%d ",expresie());
}
printf("\n");
return 0;
}