Pagini recente » Cod sursa (job #703277) | Cod sursa (job #3216613) | Cod sursa (job #1437931) | Cod sursa (job #334918) | Cod sursa (job #1233477)
#include <cstdio>
using namespace std;
char s[1001];
char exp[1001];
long len;
char sch[101];
bool val[32];
void stoexp() {
long poz1, poz2;
poz1 = poz2 = 0;
while(s[poz1]) {
if(s[poz1] == ' ') {
poz1++;
continue;
}
if(s[poz1] == 'A' && s[poz1 + 1] == 'N') {
poz1 += 3;
exp[poz2] = '&';
poz2++;
} else if(s[poz1] == 'O' && s[poz1 + 1] == 'R') {
poz1 += 2;
exp[poz2] = '|';
poz2++;
} else if(s[poz1] == 'N' && s[poz1 + 1] == 'O') {
poz1 += 3;
exp[poz2] = '~'; // '~' Hello
poz2++;
} else if(s[poz1] == 'T' && s[poz1 + 1] == 'R') {
poz1 += 4;
exp[poz2] = '1';
poz2++;
} else if(s[poz1] == 'F' && s[poz1 + 1] == 'A') {
poz1 += 5;
exp[poz2] = '0';
poz2++;
} else exp[poz2++] = s[poz1++];
}
s[poz2] = 0;
}
bool expr(char *&p);
bool term(char *&p);
bool vall(char *&p);
bool expr(char *&p) {
bool result;
result = term(p);
while(*p == '|') {
p++;
result = result || term(p);
}
if(*p == ')')
p++;
return result;
}
bool term(char *&p) {
bool result;
result = vall(p);
while(*p == '&') {
p++;
result = result && vall(p);
}
return result;
}
bool vall(char *&p) {
bool result;
bool rev = false;
while(*p == '~')
rev = !rev;
if(*p == '(') {
p++;
result = expr(p);
} else {
if(*p == '0' || *p == '1')
result = *p - '0';
else result = val[*p - 'A'];
}
if(rev)
result = !result;
return result;
}
int main() {
long i, j;
char *p;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(s);
scanf("%ld\n", &len);
gets(sch);
stoexp();
//printf("%s\n", exp);
for(i = 0; i < len; i++) {
val[sch[i] - 'A'] = !val[sch[i] - 'A'];
p = exp;
printf("%ld", expr(p));
}
return 0;
}