Pagini recente » Cod sursa (job #293813) | Cod sursa (job #474005) | Cod sursa (job #828108) | Cod sursa (job #1178536) | Cod sursa (job #113285)
Cod sursa(job #113285)
#include <stdio.h>
#include <string.h>
int v[35], 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 val()
{
int f;
if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
i+=3;
if (s[i]==' ') i++;
f=!expr();
return f;
}
else if (s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' ) { i+=4; return 1; }
else if (s[i]=='F' && s[i+1]=='A' && s[i+2]=='L') { i+=5; return 0; }
else return v[s[i]-'A'];
}
int factor()
{
int f;
if (s[i]=='(')
{
i++;
f=expr();
i++;
}
else
{
f=val();
i++;
}
if (s[i]==' ') i++;
return f;
}
int termen()
{
int f=factor();
while (i<=lg && s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
{
i+=4;
f=f && factor();
}
return f;
}
int expr()
{
int f=termen(), f2;
while (i<=lg && s[i]=='O' && s[i+1]=='R')
{
i+=3;
f2=termen();
f=f || f2;
}
return f;
}