Pagini recente » Cod sursa (job #1996443) | Arhiva de probleme | Cod sursa (job #1133867) | Cod sursa (job #2075940) | Cod sursa (job #1584092)
#include <iostream>
#include <fstream>
using namespace std;
char s[1200];
char tmp;
int n,len;
char q[101];
char *p=s;
bool val[30];
bool eval();
bool term();
int decA;
bool eval() {
bool expr = term();
p += 2;
decA += 2;
if(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D') {
p += 4;
decA += 4;
expr = expr && term();
} else if(*p == 'O' && *(p+1) == 'R') {
p += 3;
decA += 3;
expr = expr || term();
}
return expr;
}
bool term() {
bool expr;
if(*p == '(') {
p++; // (
decA++;
expr = eval();
p++; // )
decA++;
return expr;
} else {
if(*p == 'N' && *(p+1) == 'O' && *(p+2) == 'T') {
p += 4;
decA += 4;
expr = !val[*p - 'A'];
return expr;
} else if(*p == 'T' && *(p+1) == 'R' && *(p+2) == 'U' && *(p+3) == 'E') {
p += 5;
decA += 5;
return true;
} else if(*p == 'F' && *(p+1) == 'A' && *(p+2) == 'L' && *(p+3) == 'S' && *(p+4) == 'E') {
p += 6;
decA += 6;
return false;
} else {
expr = val[*p - 'A'];
return expr;
}
}
}
int main() {
ifstream in("bool.in");
ofstream out("bool.out");
in >> noskipws;
int i = 0;
while(true) {
in >> tmp;
if(isdigit(tmp)) {
n = tmp - '0';
break;
}
s[i] = tmp;
i++;
}
in >> skipws;
while(true) {
in >> tmp;
if(isdigit(tmp))
n = n*10 + tmp - '0';
else
break;
}
len = i;
//cout << p << endl;
val[tmp - 'A'] ? val[tmp - 'A'] = false : val[tmp - 'A'] = true;
out << eval();
p -= decA;
decA = 0;
//cout << endl << p << endl;
for(int i = 1; i < n; i++) {
in >> tmp;
val[tmp - 'A'] ? val[tmp - 'A'] = false : val[tmp - 'A'] = true;
out << eval();
p -= decA;
decA = 0;
//cout << endl << p << endl;
}
//cout << eval();
return 0;
}