Cod sursa(job #2682187)

Utilizator cameleonGeorgescu Dan cameleon Data 7 decembrie 2020 23:41:23
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#define NMAX 1005
using namespace std;

ifstream cin("bool.in");
ofstream cout("bool.out");

char s[NMAX], v[105],*p;
bool x[105];
int n;


bool termen_AND();
bool factor();

bool termen_OR()
{
    bool rez=termen_AND();
    while(*p =='O' && *(p+1)=='R')
    {
        p+=3;
        rez =rez || termen_AND();
    }
    return rez;
}

bool termen_AND()
{
    bool rez = factor();
    while(*p=='A' && *(p+1)=='N' && *(p+2)=='D')
    {
        p+=4;
        rez=rez && factor();
    }
    return rez;
}

bool factor()
{
    bool rez=0;
    if(*p=='N' && *(p+1)=='O' && *(p+2)=='T')
    {
        p+=4;
        rez=!(termen_OR());
    }
    else
        if(*p=='(' || *p==' ')
            p++,rez=termen_OR(),p+=2;
        else
        {
            if(isalpha(*p))
            {
                if(!isalpha(*(p+1)))
                {
                    rez=x[*p-'A'];
                    p+=2;
                }
                else
                    if(*p=='T')
                        rez=1, p+=5;
                    else
                        rez=0, p+=6;
            }
        }

    return rez;
}

int main()
{
    cin.getline(s,1005);

    cin >> n;
    cin >> v;
    for(char *p1=v; *p1!=0; p1++)
    {
        x[*p1-'A']=!x[*p1-'A'];
        p=s;
        cout<<termen_OR();
    }

}