Pagini recente » Cod sursa (job #223155) | Cod sursa (job #2358850) | Cod sursa (job #2927323) | Cod sursa (job #605903) | Cod sursa (job #884665)
Cod sursa(job #884665)
#include <stdio.h>
#include <string.h>
using namespace std;
char exp[1005], ch;
int N, i, frec[32], frec2[32], p;
int expresie();
int termen();
int factor();
inline void schimba(){
int len = strlen(exp);
for(i = 0; exp[i] != NULL; i++){
if(exp[i] == ' '){
strcpy(exp + i, exp + i + 1);
}
}
for(i = 0; exp[i] != NULL; i++){
if(exp[i] == 'A' && exp[i + 1] == 'N' && exp[i + 2] == 'D'){
exp[i] = '&'; i++;
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1); i--;
}else if(exp[i] == 'N' && exp[i + 1] == 'O' && exp[i + 2] == 'T'){
exp[i] = '-'; i++;
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1);i--;
}else if(exp[i] == 'O' && exp[i + 1] == 'R' ){
exp[i] = '|'; i++;
strcpy(exp + i, exp + i + 1); i--;
}else if(exp[i] == 'T' && exp[i + 1] == 'R' && exp[i + 2] == 'U'){
exp[i] = '1'; i++;
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1); i--;
}else if(exp[i] == 'F' && exp[i + 1] == 'A' && exp[i + 2] == 'L'){
exp[i] = '0'; i++;
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1);
strcpy(exp + i, exp + i + 1); i--;
}
}
}
int expresie(){
int rez = termen();
while(exp[p] == '&' || exp[p] == '|' || exp[p] == '-'){
if(exp[p] == '&'){
p++;
rez &= termen();
}else if(exp[p] == '|'){
p++;
rez |= termen();
}else if(exp[p] == '-'){
p++;
rez -= termen();
}
}
return rez;
}
int termen(){
int val;
if(exp[p] == '('){
p++;
val = expresie();
p++;
return val;
}else if(exp[p] == '-'){
p++;
if(exp[p] == '('){
p++;
val = expresie();
p++;
return (!val);
}else{
return (!frec[exp[p] - 'A']);
}
}
return frec[exp[p++] - 'A'];
}
int main(){
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(exp); schimba();
scanf("%d\n", &N);
for(i = 0; i < N; i++){
scanf("%c", &ch);
frec[ch - 'A'] = (!frec[ch - 'A']);
p = 0; printf("%d", expresie());
}
}