Cod sursa(job #142211)

Utilizator yonutzTalos Ionut yonutz Data 24 februarie 2008 12:04:22
Problema Bool Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.31 kb
#include<stdio.h>      
#include<string.h>      
char aux[1100],reg[110];      
int l,i,j,n,sol,cc,poz,c[1100],val[60],fr[60];      
int variabila();      
int pard();      
int negatie();      
int conjunctie();      
int disjunctie();      
int main()      
{      
    FILE *f,*g;f=fopen("bool.in","r");g=fopen("bool.out","w");      
    fgets(aux,1001,f);l=strlen(aux);      
    while(i<l)      
    { if(aux[i]=='T'&&aux[i+1]=='R'){c[j]=1;i=i+4;j++;}//TRUE=1      
      else if(aux[i]=='F'&&aux[i+1]=='A'){c[j]=0;i=i+5;j++;}//FALSE=0;      
      else if(aux[i]=='O'&&aux[i+1]=='R'){c[j]=40;i=i+2;j++;}//OR=40      
      else if(aux[i]=='A'&&aux[i+1]=='N'){c[j]=41;i=i+3;j++;}//AND=41      
      else if(aux[i]=='N'&&aux[i+1]=='O'){c[j]=42;i=i+3;j++;}//NOT=42      
      else if(aux[i]==')'){c[j]=50;i++;j++;}// )=50      
      else if(aux[i]=='('){c[j]=51;i++;j++;}// (=51      
      else if(aux[i]>='A'&&aux[i]<='Z'){c[j]=(int)(aux[i]-'A'+2);fr[c[j]]=1;i++;j++;}      
      else i++;      
    }      
    val[1]=1;      
    fscanf(f,"%d",&n);      
    fscanf(f,"%s",reg);      
    sol=variabila();      
    for(i=0;i<n;i++)      
    { cc=(int)(reg[i]-'A'+2);      
      val[cc]=1-val[cc];poz=0;sol=disjunctie();      
      fprintf(g,"%d",sol);      
    }      
    fprintf(g,"\n");      
    fcloseall();      
    return 0;      
}      
int variabila()      
{      
    int aux;      
    if(c[poz]<40){aux=val[c[poz]];poz++;}      
    else aux=negatie();      
    return aux;      
}      
int negatie()      
{      
    int aux;      
    if(c[poz]==42)      
     { if(c[poz+1]!=42){poz++;aux=!variabila();}      
       else {poz+=2;aux=variabila();}      
     }      
    else aux=pard();      
    return aux;      
}      
int pard()      
{      
    int aux=0;      
    if(c[poz]==51)      
    { poz++;aux=disjunctie();poz++;}      
    else aux=disjunctie();      
    return aux;      
}      
int conjunctie()      
{      
    int aux;      
    aux=variabila();      
    while(c[poz]==41)      
    { poz++;aux&=variabila();}      
    return aux;      
}      
int disjunctie()      
{      
    int aux;      
    aux=conjunctie();      
    while(c[poz]==40)      
    { poz++;aux|=conjunctie();}      
    return aux;      
}