Cod sursa(job #2531695)

Utilizator iulianarsenoiuArsenoiu Iulian iulianarsenoiu Data 26 ianuarie 2020 16:45:57
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <fstream>

using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char s[1005],*p;
int n;
bool val[1005];
bool oor();
bool valoare();
bool aand();
bool oor()
{
    bool r=aand();
    p++;
    while(*p=='O')
    {
        while(*p!=' ')
            p++;
        p++;
        r|=aand();
    }
    return r;
}
bool aand()
{
    int r=valoare();
    p++;
    while(*p=='A')
    {
        while(*p!=' ')
            p++;
        p++;
        r&=valoare();
    }
    return r;
}
bool valoare()
{
    bool nr=false;
    if(*p=='(')
    {
        p++;
        return oor();
        p++;
        p++;
    }
    bool NOOT=false;
    if(*p=='N')
    {
        char *p2 = p;
        p2++;
        if(*p2!=' ')
        {
            while(*p!=' ')
                p++;
            p++;
            NOOT=true;
        }
    }



    if(*p=='T')
    {
        char *p2=p;
        p2++;
        if(*p2!=' ')
        {
            while(isupper(*p))
                p++;
            if(*p!=')')
                p++;
        }
        if(NOOT==true)
            return false;
        return true;
    }


    if(*p=='F')
    {
        char *p2=p;
        p2++;
        if(*p2!=' ')
        {
            while(isupper(*p))
                p++;
            if(*p!=')')
                p++;
        }
        if(NOOT==true)
            return true;
        return false;
    }



    if(NOOT==true)
    {
        if(val[*p]==true)
            nr=false;
        if(val[*p]==false)
            nr=true;
    }
    else
    {
        nr=val[*p];
    }
    p++;
    if(*p!=')')
        p++;
    return nr;
}
int main()
{
    f.getline(s,1000);
    f>>n;
    for(int i=1;i<=n;i++)
    {
        char ch;
        f>>ch;
        if(val[ch]==true)
            val[ch]=false;
        else
            val[ch]=true;
        p=s;
        g<<oor();
    }
    g<<'\n';
    return 0;
}