Pagini recente » Cod sursa (job #1507444) | Cod sursa (job #829554) | Cod sursa (job #797809) | Cod sursa (job #797258) | Cod sursa (job #2471140)
#include <stdio.h>
int v[100], n, lg=-1, i;
char s[1001], bau, c;
int factor();
int termen();
int val();
int expr();
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
scanf("%c", &c);
while (c!='\n')
{ s[++lg]=c; scanf("%c", &c); }
scanf("%d\n", &n);
for (int I=1; I<=n; I++)
{
scanf("%c", &bau);
v[bau-'A']=!v[bau-'A'];
i=0;
printf("%d", expr());
}
fclose(stdin);
fclose(stdout);
return 0;
}
int expr()
{
int f=termen(), aux;
while (i<lg && s[i]=='O' && s[i+1]=='R')
{
i+=3;
aux=termen();
f=aux || f;
}
return f;
}
int termen()
{
int f=factor(), aux;
while (i<lg && s[i]=='A' && s[i+1]=='N')
{
i+=4;
aux=factor();
f=f && aux;
}
return f;
}
int factor()
{
int f;
if (s[i]=='(')
{
++i;
f=expr();
++i;
if (s[i]==' ') i++;
}
else
{
f=val();
}
return f;
}
int val()
{
int f;
if (s[i]=='N' && s[i+1]=='O')
{
i+=4;
if (s[i]=='(')
{
i++;
f=!expr();
i++;
if (s[i]==' ') i++;
}
else f=!val();
}
else if (s[i]=='T' && s[i+1]=='R')
{
i+=4;
if (s[i]==' ') i++;
f=1;
}
else if (s[i]=='F' && s[i+1]=='A')
{
i+=5;
if (s[i]==' ') i++;
f=0;
}
else
{
f=v[s[i]-'A'];
i++;
if (s[i]==' ') i++;
}
return f;
}