Pagini recente » Cod sursa (job #968557) | Cod sursa (job #2674810) | Cod sursa (job #2151896) | Cod sursa (job #2846216) | Cod sursa (job #1099967)
#include <stdio.h>
#define Nmax 105
#define Lmax 1005
char exp[Lmax], changes[Nmax];
char *p;
bool values[30];
int n;
bool evalA();
bool evalN();
bool factor();
inline int check(char *p)
{
if (*p == 'F' && *(p + 1) == 'A')
return 0;
else if (*p == 'T' && *(p + 1) == 'R')
return 1;
else if (*p == 'O' && *(p + 1) == 'R')
return 2;
else if (*p == 'A' && *(p + 1) == 'N')
return 3;
else if (*p == 'N' && *(p + 1) == 'O')
return 4;
else if (*p != ' ' && *p != '\n')
return 5;
return -1;
}
void read()
{
freopen("bool.in", "r", stdin);
char c[Lmax], *p;
int i = 0, d;
fgets(c, Lmax, stdin);
p = c;
while (*p != '\n'){
if (*p == ' ')
++p;
while (*p == '(' || *p == ')'){
exp[i++] = *p;
++p;
}
d = check(p);
if (d == 0){
exp[i++] = '0';
p += 5;
} else if (d == 1){
exp[i++] = '1';
p += 4;
} else if (d == 2){
exp[i++] = '+';
p += 2;
} else if (d == 3){
exp[i++] = '*';
p += 3;
} else if (d == 4){
exp[i++] = '^';
p += 3;
} else if (d == 5){
exp[i++] = *p;
++p;
}
}
exp[i] = '\0';
scanf("%d%s", &n, changes);
fclose(stdin);
}
bool eval()
{
bool r = evalA();
while (*p == '+'){
++p;
r |= evalA();
}
return r;
}
bool evalA()
{
bool r = evalN();
while (*p == '*'){
++p;
r &= evalN();
}
return r;
}
bool evalN()
{
bool r;
if (*p == '^'){
++p;
r = !factor();
} else
r = factor();
return r;
}
bool factor()
{
bool r;
if (*p == '('){
++p;
r = eval();
++p;
} else if (*p == '1'){
++p;
return true;
} else if (*p == '0'){
++p;
return false;
} else{
r = values[ *p - 'A' ];
++p;
}
return r;
}
int main()
{
freopen("bool.out", "w", stdout);
read();
for (int i = 0; i < n; ++i){
values[ changes[i] - 'A' ] = !values[ changes[i] - 'A' ];
p = exp;
printf("%d", eval());
}
fclose(stdout);
return 0;
}