Pagini recente » Cod sursa (job #1578472) | Cod sursa (job #2862927) | Cod sursa (job #3255269) | Cod sursa (job #3244892) | Cod sursa (job #3157428)
#include <fstream>
#include <string>
using namespace std;
const int SIGMA = 26;
bool letters[SIGMA];
string s;
unsigned int poz;
void skip_spaces(){
while(poz < s.size() && s[poz] == ' '){
poz++;
}
}
void update_poz(int val){
poz += val;
skip_spaces();
}
bool expresie();
bool factor(){
if(s[poz] == '('){
bool val;
update_poz(1);
val = expresie();
update_poz(1);
return val;
}
else{
if(poz < (s.size() - 3) && s[poz] == 'T' && s[poz + 1] == 'R' && s[poz + 2] == 'U' && s[poz + 3] == 'E'){
update_poz(4);
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'){
update_poz(5);
return 0;
}
update_poz(1);
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'){
update_poz(3);
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')){
update_poz(3);
val = (val & termen());
}
else{
update_poz(2);
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;
}