Pagini recente » Cod sursa (job #2401221) | Cod sursa (job #1884040) | Cod sursa (job #757595) | Cod sursa (job #732071) | Cod sursa (job #182017)
Cod sursa(job #182017)
#include<stdio.h>
int y,n,t,i;
char *p,v[10000],x,T[100],nr,V[150],l,R;
int oor(int a,int b){
if(a==1||b==1)
return 1;
return 0;
}
int aand(int a,int b){
if(a==0||b==0)
return 0;
return 1;
}
int nnot(int a,int b){
if (a==100)
return 100;
if(b==0)
return 1;
return 0;
}
int AND();
int NOT();
int FACT();
int OR(){
int r;
r=AND();
while(*p=='|'){
p++;
r = oor(r,AND());
}
return r;
}
int AND(){
int r;
r=NOT();
while(*p=='&'){
p++;
r = aand(r,NOT());
}
return r;
}
int NOT(){
int r;
r=FACT();
while(*p=='!'){
p++;
r = nnot(0,FACT());
}
return r;
}
int FACT(){
int r=0;
if(*p=='('){
p++;
r = OR();
p++;
}
else{
y=*p;
r=V[y];
p++;
}
return r;
}
int main(){
//v[0]='0';
FILE *f=fopen("bool.in","r");
fscanf(f,"%c",&x);
n=-1;
int ok=1;
while(!feof(f)&&x!='\n'){
if(!ok)
break;
if(x=='('||x==')'){
n++;
v[n]=x;
}
if(x>='A'&&x<='Z'){
t=0;
while(x>='A'&&x<='Z'){
t++;
T[t]=x;
fscanf(f,"%c",&x);
if(x=='\n')
ok=0;
}
if(t==1){
n++;
v[n]=T[1];
}
if(T[1]=='T'&&T[4]=='E'){
n++;
v[n]='1';
}
if(T[1]=='A'&&T[3]=='D'){
n++;
v[n]='&';
}
if(T[1]=='F'&&T[5]=='E'){
n++;
v[n]='0';
}
if(T[1]=='O'&&T[2]=='R'){
n++;
v[n]='|';
}
if(T[1]=='N'&&T[3]=='T'){
n++;
v[n]='0';
n++;
v[n]='!';
}
if(x=='('||x==')'){
n++;
v[n]=x;
}
for(i=1;i<=10;i++)
T[i]=0;
if(!ok)
break;
}
if(!ok)
break;
fscanf(f,"%c",&x);
}
FILE *g=fopen("bool.out","w");
fscanf(f,"%d\n",&nr);
V[49]=1;
for(l=1;l<=nr;l++){
fscanf(f,"%c",&x);
V[x]=!V[x];
p=v;
R=OR();
fprintf(g,"%d",R);
}
fclose(f);
fclose(g);
return 0;
}