Cod sursa(job #1138294)

Utilizator irimiecIrimie Catalin irimiec Data 9 martie 2014 21:05:05
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>

using namespace std;

ifstream f("bool.in");
ofstream g("bool.out");

char ex[1024],*p=ex,ch[110];
bool val[256];

bool eval(),andex(),fact();

bool eval()
{
    bool rez = andex();
    while(*p == 'O' && *(p + 1) == 'R')
    {
        p += 2;
        rez |= andex();
    }
    return rez;
}

bool andex()
{
    bool rez = fact();
    while(*p == 'A' && *(p + 1) == 'N')
    {
        p += 3;
        rez &= fact();
    }
    return rez;
}

bool fact()
{
    bool rez=0;
    if(*p == 'N' && *(p + 1) == 'O')
    {
        p += 3;
        rez |= !fact();
    }
    else if(*p == 'T' && *(p + 1) == 'R')
    {
        p += 4;
        rez = 1;
    }
    else if(*p == 'F' && *(p + 1) == 'A')
    {
        p += 5;
        rez = 0;
    }
    else if(*p=='(')
    {
        ++p;
        rez = eval();
        ++p;
    }
    else
    {
        rez = val[*p - 'A'];
        ++p;
    }
    return rez;
}

int main() {
    int n,i,t;
    char *c;
    f.getline(ex, 1024);
    f>>n>>ch;
    t=0;
    for(c=ex;c[0]!='\0';c++)
        if(isspace(c[0]))
            t++;
        else
            c[0-t]=c[0];
    c[-t]='\0';
    for(i=0;i<26;i++)
        val[i]=0;
    for(i=0;i<n;i++) {
        val[ch[i]-'A']=!val[ch[i]-'A'];
        p=ex;
        g<<eval();
    }
}