Cod sursa(job #1212999)

Utilizator TibixbAndrei Tiberiu Tibixb Data 26 iulie 2014 20:29:44
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.52 kb
#include<fstream>
#include<cstdio>
#include<cstring>
using namespace std;
int i, k, v[1005], n;
char chi[107], ch[107], ch2;
int expresie();
int sau();
int si();
int expresie(){
    int r=sau();
    while(ch[i]=='|'){
        i++;
        if(r==1)
            expresie();
        else
            if(expresie()==1)
                r=1;
    }
    return r;
}
int sau(){
    int r=si();
    while(ch[i]=='&'){
        i++;
        if(r==0)
            expresie();
        else
            if(expresie()==0)
                r=0;
    }
    return r;
}
int si(){
    int r;
    if(ch[i]!='~'){
        if(ch[i]=='('){
            i++;
            r=expresie();
            i++;
        }else
            r=v[ch[i]];
        return r;
    }
    else{
        i++;
        if(ch[i]=='('){
            i++;
            r=expresie();
            i++;
        }else
            r=v[ch[i]];
        return (r+1)%2;
    }
}
FILE *in=fopen("bool.in","r");
ofstream out("bool.out");
int main(){
    fgets(chi, 100, in);
    for(i=0; chi[i]!='\n'; i++){
        if(chi[i]>='A' && chi[i]<='Z' && (chi[i+1]==' ' || chi[i+1]==')')){
            ch[++k]=chi[i];
            if(chi[i+1]==' ')
                i++;
            continue;
        }
        if(chi[i]=='A' && chi[i+1]=='N' && chi[i+2]=='D' && chi[i+3]==' '){
            ch[++k]='&';
            i+=3;
            continue;
        }
        if(chi[i]=='O' && chi[i+1]=='R' && chi[i+2]==' '){
            ch[++k]='|';
            i+=2;
            continue;
        }
        if(chi[i]=='('){
            ch[++k]=chi[i];
            continue;
        }
        if(chi[i]==')'){
            ch[++k]=chi[i];
            continue;
        }
        if(chi[i]=='T' && chi[i+1]=='R' && chi[i+2]=='U' && chi[i+3]=='E'){
            ch[++k]='1';
            i+=3;
            continue;
        }
        if(chi[i]=='F' && chi[i+1]=='A' && chi[i+2]=='L' && chi[i+3]=='S' && chi[i+4]=='E'){
            ch[++k]='0';
            i+=4;
            continue;
        }
        //if(chi[i]==' '){
            //i++;
            //continue;
        //}
        if(chi[i]=='N' && chi[i+1]=='O' && chi[i+2]=='T'){
            ch[++k]='~';
            i+=2;
            continue;
        }
    }
    //in>>n;
    fscanf(in, "%d\n", &n);
    for(;n--;){
        i=1;
        //in>>ch2;
        fscanf(in, "%c", &ch2);
        v[ch2]=(v[ch2]+1)%2;
        out<<expresie();
    }
    //for(i=1; i<=k; i++)
        //out<<ch[i];
return 0;
}