Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Diferente pentru utilizator/raz_van_barbascu intre reviziile 5 si 4 | Diferente pentru utilizator/slayerdme intre reviziile 11 si 10 | Cod sursa (job #579968)
Cod sursa(job #579968)
#include <stdio.h>
FILE *f=fopen("bool.in","r");
FILE *g=fopen("bool.out","w");
int n,t;
int val[301];
char e[1001],s[101],*p;
int expresie();
int termen();
int factor();
bool ver(){
if(t>=2 && e[t]=='R' && e[t-1]=='O'){
t--;
e[t]='|';
return true;
}
if(t>=3 && e[t]=='D' && e[t-1]=='N' && e[t-2]=='A'){
t-=2;
e[t]='&';
return true;
}
if(t>=3 && e[t]=='T' && e[t-1]=='O' && e[t-2]=='N'){
t-=2;
e[t]='!';
return true;
}
if(t>=4 && e[t]=='E' && e[t-1]=='U' && e[t-2]=='R' && e[t-3]=='T'){
t-=3;
e[t]='1';
return true;
}
if(t>=5 && e[t]=='E' && e[t-1]=='S' && e[t-2]=='L' && e[t-3]=='A' && e[t-4]=='F'){
t-=4;
e[t]='0';
return true;
}
return false;
}
int factor(){
int r=0;
while(*p=='!'){
p++;
r=!r;
}
if(*p=='('){
p++;
r^=expresie();
p++;
}
else{
r=r^val[*p];
p++;
}
return r;
}
int termen(){
int r;
r=factor();
while(*p=='&'){
p++;
int z=factor();
r&=z;
}
return r;
}
int expresie(){
int r=termen();
while(*p=='|'){
if(*p=='|'){
p++;
int z=termen();
r|=z;
continue;
}
}
return r;
}
int main(void){
register int i,j;
char ch='q';
while(ch!='\n'){
fscanf(f,"%c",&ch);
if(ch==' ')
continue;
e[++t]=ch;
ver();
}
val['1']=1,val['0']=0;
fscanf(f,"%d\n",&n);
for(i=1;i<=n;i++){
fscanf(f,"%c",&ch);
val[ch]=1^val[ch];
p=e+1;
fprintf(g,"%d",expresie());
}
return 0;
}