Pagini recente » Cod sursa (job #1246316) | Cod sursa (job #3265854) | Cod sursa (job #1619460) | Cod sursa (job #128028) | Cod sursa (job #3157416)
#include <fstream>
#include <string>
using namespace std;
const int SIGMA = 26;
bool letters[SIGMA];
string s;
unsigned int poz;
bool expresie();
bool factor(){
if(s[poz] == '('){
bool val;
poz++;
val = expresie();
poz++;
return val;
}
else{
return letters[s[poz] - 'A'];
}
}
bool termen(){
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(){
bool val = termen();
while(poz < (s.size() - 2) && ((s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D') || (s[poz] == 'O' && s[poz + 1] == 'R'))){
if((s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D')){
poz += 4;
val = (val & termen());
}
else{
poz += 3;
val = (val | termen());
}
}
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();
}
return 0;
}