Pagini recente » Cod sursa (job #91272) | Cod sursa (job #2356963) | Cod sursa (job #1474971) | Cod sursa (job #1648379) | Cod sursa (job #1523144)
#include<cstdio>
#include<cstring>
using namespace std;
FILE *f=fopen("bool.in", "r");
FILE *g=fopen("bool.out", "w");
char initial[1005], litere[105], s[1005];
int n, valoare[30], poz;
void elimin_and_or_not(){
char ss[7][5], *p, ch[]={0, '&', '|', '!', '1', '0'};
strcpy(ss[1], "AND");
strcpy(ss[2], "OR");
strcpy(ss[3], "NOT");
strcpy(ss[4], "TRUE");
strcpy(ss[5], "FALSE");
p=strchr(initial, ' ');
while(p!=NULL){
strcpy(p, p+1);
p=strchr(initial, ' ');
}
for(int i=1; i<=5; ++i){
p=strstr(initial, ss[i]);
while(p!=NULL){
strcpy(p, p+strlen(ss[i])-1);
initial[p-initial]=ch[i];
p=strstr(initial, ss[i]);
}
}
}
void schimba_litere(){
strcpy(s, initial);
int n=strlen(s);
for(int i=0; i<n; ++i)
if('A'<=s[i]&&s[i]<='Z')
s[i]=valoare[s[i]-'A']+'0';
}
int f4(); //VAl
int f3(); //NOT
int f2(); //AND
int f1(){ //OR
int r=f2(), p;
while(s[poz]=='|'){
++poz;
p=f2();
r=r|p;
}
return r;
}
int f2(){ //And
int r=f3(), p;
while(s[poz]=='&'){
++poz;
p=f2();
r=r&p;
}
return r;
}
int f3(){//NOT
int r;
if(s[poz]=='!'){
++poz;
r=f4();
r=(r+1)%2;
}
else
r=f4();
return r;
}
int f4(){
int r;
if(s[poz]=='('){
++poz;
r=f1();
++poz;
return r;
}
r=s[poz]-'0';
++poz;
return r;
}
int main()
{
fgets(initial, 1001, f);
fscanf(f, "%d%s", &n, litere);
elimin_and_or_not();
//fprintf(g, "%s", initial);
schimba_litere();
//fprintf(g, "%s", s);
for(int i=0; i<n; ++i){
valoare[litere[i]-'A']=(valoare[litere[i]-'A']+1)%2;
schimba_litere();
//fprintf(g, "%c: %s", litere[i], s);
fprintf(g, "%d", f1());
poz=0;
}
return 0;
}