Pagini recente » Cod sursa (job #2006806) | Cod sursa (job #2085064) | Cod sursa (job #2018405) | Cod sursa (job #852476) | Cod sursa (job #1584890)
#include <iostream>
#include <fstream>
using namespace std;
char s[1200];
char *p=s;
char tmp;
int n;
bool val[30];
bool eval();
bool term();
bool factor();
bool termen();
int decA;
int am = 0;
bool eval() {
bool expr = termen();
while(*p == 'O' && *(p+1) == 'R') {
if(*p == 'O' && *(p+1) == 'R') {
p += 3;
decA += 3;
expr |= termen();
}
}
return expr;
}
bool termen() {
bool expr = factor();
while(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D') {
if(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D') {
p += 4;
decA += 4;
expr &= factor();
}
}
return expr;
}
bool factor() {
bool expr = false;
if(*p == 'N' && *(p+1) == 'O' && *(p+2) == 'T') {
p += 4;
decA += 4;
expr = !factor();
return expr;
}
if(*p == '(') {
p++; // (
decA++;
expr = eval();
p++; // )
decA++;
return expr;
} else if(*p == 'T' && *(p+1) == 'R' && *(p+2) == 'U' && *(p+3) == 'E') {
if(*p == ')') {
p += 4;
decA += 4;
} else {
p += 5;
decA += 5;
}
return true;
} else if(*p == 'F' && *(p+1) == 'A' && *(p+2) == 'L' && *(p+3) == 'S' && *(p+4) == 'E') {
if(*p == ')') {
p += 5;
decA += 5;
} else {
p += 6;
decA += 6;
}
return false;
} else {
expr = val[*p - 'A'];
if(*p == ')') {
p++;
decA++;
} else {
p += 2;
decA += 2;
}
return expr;
}
return expr;
}
int main() {
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(s, 1001);
in >> n;
for(int i = 0; i < n; i++) {
am++;
in >> tmp;
val[tmp - 'A'] ? val[tmp - 'A'] = false : val[tmp - 'A'] = true;
out << eval();
p -= decA;
decA = 0;
}
return 0;
}