Cod sursa(job #141511)

Utilizator BuniakovskiNeguletu Octavian Buniakovski Data 23 februarie 2008 12:36:25
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 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;   
}