Pagini recente » Cod sursa (job #2215466) | Cod sursa (job #2739912) | Cod sursa (job #2142913) | Cod sursa (job #1737479) | Cod sursa (job #1533117)
#include <stdio.h>
char v[1000];
int fr[101];
int n,k;
int expr();
int term();
int val();
/* expr->term|...
term->fact&...
fact->[!]put
put->val|(expr) */
int expr(){
int rasp=term();
while(v[k]=='|'&&k<=n){
k++;
rasp=rasp|term();
}
return rasp;
}
int term(){
int rasp;
rasp=val();
while(v[k]=='&'&&k<=n){
k++;
rasp=rasp&val();
}
return rasp;
}
int val(){
int rasp,nr=0;
while(v[k]=='!'){
k++;
nr++;
}
if(v[k]>='A'&&v[k]<='Z'){
rasp=fr[v[k]-'A'];
k++;
}
if(v[k]==0||v[k]==1){
rasp=v[k];
k++;
}
if(v[k]=='('){
k++;
rasp=expr();
k++;
}
if(nr%2==1)
rasp=(rasp+1)%2;
return rasp;
}
inline void verificare(int &i){
if(i>=1&&v[i]=='R'&&v[i-1]=='O'){
i=i-1;
v[i]='|';
}
if(i>=2&&v[i]=='T'&&v[i-1]=='O'&&v[i-2]=='N'){
i=i-2;
v[i]='!';
}
if(i>=2&&v[i]=='D'&&v[i-1]=='N'&&v[i-2]=='A'){
i=i-2;
v[i]='&';
}
if(i>=3&&v[i]=='E'&&v[i-1]=='U'&&v[i-2]=='R'&&v[i-3]=='T'){
i=i-3;
v[i]=1;
}
if(i>=4&&v[i]=='E'&&v[i-1]=='S'&&v[i-2]=='L'&&v[i-3]=='A'&&v[i-4]=='F'){
i=i-4;
v[i]=0;
}
}
int main(){
FILE *fin,*fout;
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
int i,m;
char ch;
i=0;
ch=fgetc(fin);
v[i]=ch;
i=1;
while(ch!='\n'){
ch=fgetc(fin);
if(ch!=' '&&ch!='\n'){
v[i]=ch;
verificare(i);
i++;
}
}
n=i-1;
fscanf(fin,"%d",&m);
ch=fgetc(fin);
for(i=1;i<=m;i++){
ch=fgetc(fin);
fr[ch-'A']=(fr[ch-'A']+1)%2;
k=0;
fprintf(fout,"%d",expr());
}
return 0;
}