Pagini recente » Cod sursa (job #2789249) | Cod sursa (job #2784141) | Cod sursa (job #1422476) | Cod sursa (job #2713477) | Cod sursa (job #3157436)
#include <fstream>
#include <string>
using namespace std;
const int SIGMA = 26;
bool letters[SIGMA];
string s;
unsigned int poz;
bool expresie_or();
bool factor(){
if(s[poz] == '('){
bool val;
poz++;
val = expresie_or();
poz++;
return val;
}
else{
if(poz < (s.size() - 3) && s[poz] == 'T' && s[poz + 1] == 'R' && s[poz + 2] == 'U' && s[poz + 3] == 'E'){
poz += 5;
return 1;
}
if(poz < (s.size() - 4) && s[poz] == 'F' && s[poz + 1] == 'A' && s[poz + 2] == 'L' && s[poz + 3] == 'S' && s[poz + 4] == 'E'){
poz += 6;
return 0;
}
poz += 2;
return letters[s[poz - 2] - 'A'];
}
}
bool negare(){
bool negat;
negat = 0;
while(poz < (s.size() - 2) && s[poz] == 'N' && s[poz + 1] == 'O' && s[poz + 2] == 'T'){
poz += 4;
negat = 1;
}
bool val = factor();
if(negat){
return !val;
}
else{
return val;
}
}
bool expresie_and(){
bool val = negare();
while(poz < (s.size() - 2) && (s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D')){
poz += 4;
val = (val & negare());
}
return val;
}
bool expresie_or(){
bool val = expresie_and();
while(poz < (s.size() - 1) && (s[poz] == 'O' && s[poz + 1] == 'R')){
poz += 3;
val = (val | expresie_and());
}
return val;
}
int main(){
ifstream fin("bool.in");
ofstream fout("bool.out");
int n;
char c;
getline(fin, s);
fin >> n;
for(int i = 0; i < n; i++){
fin >> c;
letters[c - 'A'] = !letters[c - 'A'];
poz = 0;
fout << expresie_or();
}
return 0;
}