Pagini recente » Istoria paginii utilizator/sokka1000 | Cod sursa (job #1383599) | Cod sursa (job #2970545) | Cod sursa (job #1128076) | Cod sursa (job #707950)
Cod sursa(job #707950)
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
string x, e;
bool val[500];
int c, n;
int f1();
int f2();
int f3();
int f4();
int f1() {
int sol;
sol = f2();
while(e[c] == '|') {
++c;
sol = sol | f2();
}
return sol;
}
int f2() {
int sol;
sol = f3();
while(e[c] == '&') {
++c;
sol = sol & f3();
}
return sol;
}
int f3() {
int sol;
if(e[c] == '!') {
++c;
return !f3();
}
else
return f4();
}
int f4() {
if(e[c] == '(') {
++c;
int rez = f1();
++c;
return rez;
}
++c;
return val[e[c - 1]];
}
int main()
{
char ch;
int i;
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
getline(cin, x);
for(i = 0; i < x.size();) {
if(x[i] == 'N' && x[i + 1] == 'O') {
e.push_back('!');
i += 4;
}
else if(x[i] == 'A' && x[i + 1] == 'N') {
e.push_back('&');
i += 4;
}
else if(x[i] == 'O' && x[i + 1] == 'R') {
e.push_back('|');
i += 3;
}
else if(x[i] == 'T' && x[i + 1] == 'R') {
e.push_back('1');
i += 5;
}
else if(x[i] == 'F' && x[i + 1] == 'A') {
e.push_back('0');
i += 6;
}
else if(x[i] == '(' || x[i] == ')') {
e.push_back(x[i]);
++i;
}
else if(x[i] != ' ') {
e.push_back(x[i]);
++i;
}
}
//cerr << e;
val['0'] = 0;
val['1'] = 1;
scanf("%d\n", &n);
for(i = 1; i <= n; ++i) {
scanf("%c", &ch);
val[ch] = 1 - val[ch];
c = 0;
printf("%d", f1());
}
printf("\n");
return 0;
}