Pagini recente » Cod sursa (job #2633006) | Cod sursa (job #2643693) | Cod sursa (job #873900) | Cod sursa (job #1010959) | Cod sursa (job #2358235)
#include <bits/stdc++.h>
using namespace std;
string s, ex;
int p;
bool logic[30];
bool expresie();
bool termen();
bool factor();
void precalc(){
for(int i = 0; i < int(s.size()); ++i){
if((isalpha(s[i]) && !isalpha(s[i - 1]) && !isalpha(s[i + 1])) || s[i] == '(' || s[i] == ')')
ex += s[i];
else{
if(s[i] == 'O' && s[i + 1] == 'R') ex += '|';
else if(s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D') ex += '&';
else if(s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T') ex += '!';
else if(s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E') ex += '1';
else if(s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E') ex += '0';
}
}
}
bool expresie(){
bool rez = termen();
while(ex[p] == '|'){
p++;
rez = rez | termen();
}
return rez;
}
bool termen(){
bool rez = factor();
while(ex[p] == '&'){
p++;
rez = rez & factor();
}
return rez;
}
bool factor(){
bool val = 0;
if(ex[p] == '('){
p++;
val = expresie();
p++;
}
else if(ex[p] == '!'){
p++;
val = 1 - factor();
}
else if(isdigit(ex[p])){
val = ex[p] - '0';
p++;
}
else{
val = logic[ex[p] - 'A' + 1];
p++;
}
return val;
}
int main()
{
ifstream fin("bool.in");
ofstream fout("bool.out");
getline(fin, s);
precalc();
int n;
fin >> n;
while(n > 0){
char c;
fin >> c;
logic[c - 'A' + 1] = !logic[c - 'A' + 1];
fout << expresie();
p = 0;
n--;
}
return 0;
}