Cod sursa(job #253190)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 15:37:25
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
  #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(){  
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;