Pagini recente » Cod sursa (job #2034347) | Istoria paginii utilizator/georgicaru69 | Cod sursa (job #1511564) | Cod sursa (job #1292829) | Cod sursa (job #1946850)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
char s[1005], v[1005],x;
int i,n,m,N,w[120];
int exprOr();
int exprAnd();
int exprXor();
int factor();
int exprOr() {
int r = exprAnd();
while (v[i] == '|') {
i++;
r = (r | exprAnd());
}
return r;
}
int exprAnd() {
int r = exprXor();
while (v[i] == '&') {
i++;
r = (r & exprXor());
}
return r;
}
int exprXor() {
int r = factor();
while (v[i] == '^') {
i++;
r = (r^factor());
}
return r;
}
int factor() {
int r;
if (v[i] == '(') {
i++;
r = exprOr();
i++;
} else {
if (v[i] == '1') {
i++;
return 1;
}
if (v[i] =='0') {
i++;
return 0;
}
return w[ v[i++] ];
}
return r;
}
int main () {
fin.get(s, 1002);
m = strlen (s);
for (i=0;i<m;i++) {
if (s[i] == ' ')
continue;
if (s[i] == 'O' && s[i+1] == 'R') {
v[n++] = '|';
i++;
continue;
}
if (s[i]=='A' && s[i+1] == 'N') {
v[n++] = '&';
i+=2;
continue;
}
if (s[i] == 'N' && s[i+1] == 'O') {
v[n++] = '1';
v[n++] = '^';
i+=2;
continue;
}
if (s[i] == 'T' && s[i+1] == 'R') {
v[n++] = '1';
i+=3;
continue;
}
if (s[i]== 'F' && s[i+1] == 'A') {
v[n++] = '0';
i+=4;
continue;
}
if (s[i] == '(' || s[i] == ')') {
v[n++] = s[i];
continue;
}
v[n++] = s[i];
}
fin>>N;
for (;N--;) {
fin>>x;
w[x] = 1 - w[x];
i = 0;
fout<<exprOr();
}
return 0;
}