Cod sursa(job #2816407)

Utilizator AxicaVirtosu Alexandra Mihaela Axica Data 11 decembrie 2021 12:56:51
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

bool expresie();
bool termen();
bool factor();

char v[1010], s[1010], c;
int i, k=-1;///indicele cu care parcurg expresia
bool fr[27];
int n;

bool expresie()
{
    bool ok=termen();
    while(s[i]=='O' && s[i+1]=='R')
    {
        i+=2;
        ok=ok||termen();
    }
    return ok;
}

bool termen()
{
    bool ok=factor();
    while(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
    {
        i+=3;
        ok=ok&&factor();
    }
    return ok;
}

bool factor()
{
    bool ok;
    if(s[i]=='(')
    {
        i++;
        ok=expresie();
        i++;
    }
    else
    {
        if(s[i]=='T'&&s[i+1]=='R')
            ok=1, i+=4;
        else if(s[i]=='F'&& s[i+1]=='A')
            ok=0, i+=5;
        else if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
            ok=!expresie();
        else if(s[i]>='A' && s[i]<='B')
            ok=fr[s[i]-'A'];
    }
    return ok;

}

int main()
{
    ///stergerea spatiilor
    fin.getline(v, 1001);
    for(int i=0; v[i]; i++)
        if(v[i]!=' ')
            s[++k]=v[i];
    //fout<<s;

    fin>>n;
    for(int i=1; i<=n; i++)
    {
         fin>>c;
         fr[c-'A']=!fr[c-'A'];
        fout<<expresie();
    }
 return 0;
}