Cod sursa(job #2661930)

Utilizator CleliaClelia Maria Dobrescu Clelia Data 22 octombrie 2020 22:51:43
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char s[1002];
int o[27],i,lg;
bool expresie ();
bool termen ();
bool factor ();
bool expresie ()
{
    bool ok,x=termen();
    ok=1;
    if (s[i]!='O' || s[i+1]!='R')
        ok=0;
    else
        i=i+2;
    while (i<lg && ok)
    {
        bool evaluare=termen();
        x=(x||evaluare);
        if (s[i]!='O' || s[i+1]!='R')
            ok=0;
        else
            i=i+2;
    }
    if (s[i]==')')
        i++;
    return x;
}
bool termen ()
{
    bool ok,x=factor();
    ok=1;
    if(s[i]!='A' || s[i+1]!='N' || s[i+2]!='D')
        ok=0;
    else
        i=i+3;
    while (i<lg && ok)
    {
        bool evaluare=factor();
        x=(x&&evaluare);
        if (s[i]!='A' || s[i+1]!='N' || s[i+2]!='D')
            ok=0;
        else
            i=i+3;
    }
    return x;
}
bool factor ()
{
    bool neg=0,aux;
    int ver;
    while (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
    {
        i=i+3;
        neg=(neg==1?0:1);
    }
    if(s[i]=='(')
    {
        i++;
        aux=expresie();
        if(neg==0)
            return aux;
        return (aux==1?0:1);
    }
    ver=o[s[i]-'A'+1];
    if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
    {
        i=i+4;
        ver=1;
    }
    else
        if(s[i]=='F' && s[i+1]=='A' && s[i+2] == 'L' && s[i+3]=='S' && s[i+4]=='E')
        {
            i=i+5;
            ver=0;
        }
        else
            i++;
    if(neg==0)
        return (ver==1?1:0);
    return (ver==1?0:1);
}
int main ()
{
    int n,y;
    char h;
    fin.get(h);
    while(h!='\n')
    {
        if(h!=' ')
        {
            lg++;
            s[lg-1]=h;
        }
        fin.get(h);
    }
    s[lg]='\0';
    fin>>n;
    fin.get();
    for(y=1;y<=n;y++)
    {
        fin>>h;
        o[h-'A'+1]=(o[h-'A'+1]==1?0:1);
        i=0;
        fout<<expresie();
    }
}