Pagini recente » Cod sursa (job #3153383) | Cod sursa (job #2783329) | Cod sursa (job #1270146) | Cod sursa (job #1286158) | Cod sursa (job #3192784)
#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 && (i==0 || isLetter(s[i-1]) == false);
}
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++;
}
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+=3;
}
else if (s[i] == 'O' && s[i+1] == 'R'){
final[idx++] = '|';
i+=2;
}
else if (s[i] == 'N' && s[i+1] == 'O'){
final[idx++] = '!';
i+=3;
}
else if (s[i] == 'F' && s[i+1] == 'A'){
final[idx++] = '0';
i+=5;
}
else if (s[i] == 'T' && s[i+1] == 'R'){
final[idx++] = '1';
i+=4;
}
}
else
++i; // pentru spatiu gen
}
idx--;
for (int i=0; i<=idx; ++i)
cout << final[i];
cout << '\n';
}
bool orEx();
bool andEx();
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];
pos = 0;
out << orEx();
}
return 0;
}
bool orEx (){
bool res = andEx();
while (final[pos] == '|'){
pos++;
bool aux = andEx();
res = res || aux;
}
return res;
}
bool andEx (){
bool res = fact();
while (final[pos] == '&'){
pos++;
bool aux = fact();
res = res && aux;
}
return res;
}
bool fact(){
bool res;
if (final[pos] == '('){
pos++;
res = orEx();
pos++;
}
else if (final[pos] == '!'){
pos++;
bool aux = fact();
res = !aux;
}
else{
if (final[pos] == '1'){
res = true;
pos++;
}
else if (final[pos] == '0'){
res = false;
pos++;
}
else{
res = valLetter[final[pos]];
pos++;
}
}
return res;
}