Pagini recente » Cod sursa (job #2629700) | Cod sursa (job #2677900) | Cod sursa (job #1201695) | Cod sursa (job #2659688) | Cod sursa (job #597296)
Cod sursa(job #597296)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 1005;
char s[N], x[N];
int nr, n, v[N];
int solve(){
int stack[N], vf = 0, i;
for(i = 1; i <= nr; ++i)
if(x[i] <= 'Z' && x[i] >= 'A')
stack[++vf] = v[x[i] - 'A'];
else
if(x[i] == '1' || x[i] =='0')
stack[++vf] = x[i] - '0';
else
if(x[i] == '&'){
int a = stack[vf], b = stack[--vf];
stack[vf] = b & a;
}
else
if(x[i] == '|'){
int a = stack[vf], b = stack[--vf];
stack[vf] = b | a;
}
else
if(x[i] == '!')
stack[vf] ^= 1;
return stack[1];
}
int main() {
ifstream fin("bool.in");
ofstream fout("bool.out");
int i;
fin.get(s, 1000, '\n');
int r = strlen(s);
char stack[N];
int vf = 0;
i = 0;
while(i < r) {
if(s[i] == ' ')
;
else
if(s[i] == '(')
stack[++vf] = '(';
else
if(s[i] == ')'){
while(vf && stack[vf] != '('){
x[++nr] = stack[vf];
--vf;
}
--vf;
}
else
if(s[i] == 'T') {
if(strncmp(&s[i], "TRUE", 4) == 0){
x[++nr] = '1';
i += 3;
}
else
x[++nr] = s[i];
}
else
if(s[i] == 'F') {
if(strncmp(&s[i], "FALSE", 5) == 0){
x[++nr] = '0';
i += 4;
}
else
x[++nr] = s[i];
}
else
if(s[i] == 'O'){
if(strncmp(&s[i], "OR", 2) == 0){
while(vf && (stack[vf] == '!' || stack[vf] == '&')){
x[++nr]=stack[vf];
--vf;
}
stack[++vf] = '|', ++i;
}
else
x[++nr] = s[i];
}
else
if(s[i] == 'A'){
if(strncmp(&s[i], "AND", 3) == 0){
while(vf && stack[vf] == '!'){
x[++nr] = stack[vf];
--vf;
}
stack[++vf] = '&', i += 2;
}
else
x[++nr] = s[i];
}
else
if(s[i] == 'N'){
if(strncmp(&s[i], "NOT", 3) == 0){
i += 2;
stack[++vf] = '!';
}
else
x[++nr] = s[i];
}
else
x[++nr] = s[i];
++i;
}
while(vf ){
x[++nr] = stack[vf];
--vf;
}
fin>>n;
char c;
for(i = 1; i <= n;++i){
fin >> c;
v[c - 'A'] ^= 1;
fout<<solve();
}
fout<<'\n';
fin.close();
fout.close();
return 0;
}