Cod sursa(job #1020889)

Utilizator smaraldaSmaranda Dinu smaralda Data 2 noiembrie 2013 19:53:23
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>
#include<string.h>

const int LMAX = 1000;

bool termen();
bool factor();

char *p,s[LMAX + 5];
bool val[30];
int n;

bool expresie () {
    bool res = termen();
    while(*p == 'O' && *(p + 1) == 'R') {
        p += 3;
        res = res | termen();
        }
    return res;
}

bool termen () {
    bool res = factor();
    while(*p == 'A' && *(p + 1) == 'N') {
        p += 4;
        res = res & factor();
        }
    return res;
}

bool factor () {
    bool res;

    if(*p == '(') {
       ++p;
       res = expresie();
       ++p;
       }
    else
        if(*p == 'T' && *(p + 1) == 'R') {
            res = 1;
            p += 5;
            }
        else
            if(*p == 'F' && *(p + 1) == 'A') {
                res = 0;
                p += 6;
                }
            else
                if(*p == 'N' && *(p + 1) == 'O') {
                    p += 4;
                    res = !factor();
                    }
                else {
                    res = val[*p - 'A'];
                    p += 2;
                    }
    return res;
}

int main() {
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    char ch;
    int i;

    gets(s);
    scanf("%d\n",&n);
    memset(val,false,sizeof(val));
    for(i = 1; i <= n; i++) {
        scanf("%c",&ch);
        val[ch - 'A'] = !val[ch - 'A'];
        p = s;
        printf("%d",expresie());
        }
    return 0;
}