Pagini recente » Cod sursa (job #950765) | Cod sursa (job #1912945) | Cod sursa (job #1630620) | Cod sursa (job #678650) | Cod sursa (job #756088)
Cod sursa(job #756088)
#include <cstdio>
#include <cstring>
char expr[1010];
char modif[102];
int N;
bool rez;
bool vars[26];
char *p;
char operators[3][4] = {"OR", "AND", ""};
int hmax = 2;
void delSpaces (char *p) {
for (int i=0; i<strlen(p); ++i)
if (p[i] == ' ')
strcpy(p+i, p+i+1);
}
bool operatie( bool t1, bool t2, char *o) {
if ( !strcmp(o,"AND") ) return t1 && t2;
else if (!strcmp(o, "OR") ) return t1 || t2;
}
bool eval(int);
bool operand () {
bool r;
if ( *p == '(') {
++p; r = eval(0); ++p;
} else if ( !strncmp(p, "NOT", 3)) {
p+=3; r = !eval(0);
} else if ( !strncmp(p, "TRUE", 4)) {
p+=4; r = true;
} else if ( !strncmp(p, "FALSE", 5)) {
p+=5; r = false;
} else {
r = vars[p[0]-'A'];
++p;
}
return r;
}
bool eval(int h) {
bool r = (h == hmax)? operand() : eval(h+1);
while ( h < hmax && strncmp(operators[h], p, strlen(operators[h]))==0 ) {
p += strlen(operators[h]);
r = operatie(r, eval(h+1), operators[h]);
}
return r;
}
int main () {
freopen("evaluare.in","rt",stdin);
freopen("evaluare.out","wt",stdout);
gets(expr);
delSpaces(expr);
p = expr;
scanf("%d\n", &N);
gets(modif);
for (int i=0; i<N; ++i) {
int v = modif[i]-'A';
vars[v] = (vars[v])?false:true;
printf("%hd", eval(0));
p = expr;
}
printf("\n");
return 0;
}