Pagini recente » Cod sursa (job #3196981) | Cod sursa (job #973593) | Cod sursa (job #2163686) | Cod sursa (job #2459365) | Cod sursa (job #3192704)
#include <iostream>
#include <fstream>
#include <map>
#include <cstring>
#define S_MAX 1005
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
// initial sunt toate false;
char s[S_MAX];
char final[S_MAX];
map <char, bool> valLetter;
int n, pos;
bool isLetter (char x){
return x >= 'A' && x <= 'Z';
}
bool singleLetter (int i){
return (isLetter(s[i+1]) == false || s[i+1] == '\0') && (isLetter(s[i-1]) == false|| i == 1);
}
void makeItSimple (){
int idx = 0, i = 0;
while (i<strlen(s)){
if (isLetter(s[i]) == true && singleLetter(i) == true){
final[idx++] = s[i];
valLetter[s[i]] = false;
i+=2;
}
else if (s[i] == '('){
final[idx++] = '(';
i++;
}
else if (s[i] == ')'){
final[idx++] = ')';
i++;
}
else if (isLetter(s[i])){
if (s[i] == 'A' && s[i+1] == 'N'){
final[idx++] = '&';
i+=4;
}
else if (s[i] == 'O' && s[i+1] == 'R'){
final[idx++] = '|';
i+=3;
}
else if (s[i] == 'N' && s[i+1] == 'O'){
final[idx++] = '!';
i+=4;
}
else if (s[i] == 'F' && s[i+1] == 'A'){
final[idx++] = '0';
i+=6;
}
else if (s[i] == 'T' && s[i+1] == 'R'){
final[idx++] = '1';
i+=5;
}
}
else
++i; // pentru spatiu gen
}
idx--;
}
bool orEx();
bool andEx();
bool notEx();
bool fact();
int main (){
in.getline(s, S_MAX);
makeItSimple();
in >> n;
char x;
for (int i=1; i<=n; ++i){
in >> x;
valLetter[x] = !valLetter[x];
cout << valLetter[x] << ' ';
out << orEx();
}
return 0;
}
bool orEx (){
bool res = andEx();
while (final[pos] == '|'){
pos++;
res = res || andEx();
}
return res;
}
bool andEx (){
bool res = notEx();
while (final[pos] == '&'){
pos++;
res = res && notEx();
}
return res;
}
bool notEx(){
bool res = fact();
while (final[pos] == '!'){
res = !fact();
}
return res;
}
bool fact(){
bool res= false;
while (final[pos] == '('){
pos++;
orEx();
pos++;
}
if (final[pos] == '1')
res = true;
else if (final[pos] == '0')
res = false;
else if (isLetter(final[pos]) == true)
res = valLetter[final[pos]];
return res;
}