Pagini recente » Cod sursa (job #509502) | Cod sursa (job #2503066) | Cod sursa (job #437929) | Cod sursa (job #2059346) | Cod sursa (job #1584316)
#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();
bool factor();
int decA;
int am = 0;
bool eval() {
bool expr = term();
bool temp = false;
while((*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D') || (*p == 'O' && *(p+1) == 'R')) {
if(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D') {
p += 4;
decA += 4;
temp = term();
expr = expr && temp;
} else if(*p == 'O' && *(p+1) == 'R') {
p += 3;
decA += 3;
temp = term();
expr = expr || temp;
}
}
return expr;
}
bool term() {
bool expr;
if(*p == 'N' && *(p+1) == 'O' && *(p+2) == 'T') {
p += 4;
decA += 4;
expr = !term();
return expr;
}
expr = factor();
return expr;
}
bool factor() {
bool expr = false;
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();
//cout << p << endl;
p -= decA;
decA = 0;
}
//cout << eval();
return 0;
}