Pagini recente » Cod sursa (job #3226503) | Cod sursa (job #629087) | Cod sursa (job #1503356) | Cod sursa (job #696951) | Cod sursa (job #1829144)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[2020];
char T[120];
int F[100];
int t, i, j;
int expresie();
int termenssau();
int termenssi();
int termensnu();
void parsare(char *s) {
for (i=0;s[i]!=0;i++) {
if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E') {
s[i] = '1';
strcpy(s+i+1, s+i+4);
} else
if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E') {
s[i] = '0';
strcpy(s+i+1, s+i+5);
} else
if (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D') {
s[i] = '&';
strcpy(s+i+1, s+i+3);
} else
if (s[i] == 'O' && s[i+1] == 'R') {
s[i] = '|';
strcpy(s+i+1, s+i+2);
} else
if (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T') {
s[i] = '1';
s[i+1] = '^';
strcpy(s+i+2, s+i+3);
}
}
j = 0;
for (i=1;s[i]!=0;i++) {
if (s[i] != ' ')
s[++j] = s[i];
}
s[++j] = 0;
}
int expresie() {
int r = termenssau();
while (s[i] == '|') {
i++;
r |= termenssau();
}
return r;
}
int termenssau() {
int r = termenssi();
while (s[i] == '&') {
i++;
r &= termenssi();
}
return r;
}
int termenssi() {
int r = termensnu();
while (s[i] == '^') {
i++;
r ^= termensnu();
}
return r;
}
int termensnu() {
int r;
if (s[i] == '(') {
i++;
r = expresie();
i++;
return r;
}
if (s[i] == '1') {
i++;
return 1;
}
if (s[i] == '0') {
i++;
return 0;
}
if (s[i] >='A' && s[i] <= 'Z') {
i++;
return F[s[i-1]];
}
}
int main(){
fin.get(s, 2010);
fin>>t;
fin>>T;
parsare(s);
for (j=0;j<t;j++) {
F[T[j]] = 1-F[T[j]];
i = 0;
fout<<expresie();
}
fout<<"\n";
return 0;
}