Cod sursa(job #1077933)

Utilizator cldmeClaudiu Ion cldme Data 11 ianuarie 2014 20:03:58
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <cstdio>
int const N=1001;
char s[N],x;
bool v[N];
int p;
bool expresie();
bool termen();
bool factor();
bool eval();

bool expresie()
{
    bool sum=termen();
    if(s[p]=='O' && s[p+1]=='R')
    {
        p+=2;
        sum|=termen();
    }
    return sum;
}

bool termen()
{
    bool prod=eval();
    if(s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
    {
        p+=3;
        prod&=termen();
    }
    return prod;
}

bool eval()
{
    if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
    {
        p+=5;
        return !factor();
    }
    return factor();
}

bool factor()
{
    bool val=false;
    if(s[p]=='(')
    {
        p++;
        val=expresie();
        p++;
        return val;
    }
    if(s[p]=='T' && s[p+1]=='R' &&  s[p+2]=='U' &&  s[p+3]=='E')
    {
        val=true;
        p+=4;
    }
    else
    {
        if(s[p]=='F' && s[p+1]=='A' &&  s[p+2]=='L' &&  s[p+3]=='S' &&  s[p+4]=='E')
        {
            val=true;
            p+=5;
        }
        else
        {
            val=v[s[p]-'A'+1];
            p++;
        }
    }
    return val;
}

int main()
{
    int i,n;
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    fgets(s,N,stdin);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%c",&x);
        v[x-'A'+1]=!v[x-'A'+1];
        printf("%d",expresie());
    }
    return 0;
}