Cod sursa(job #2209760)

Utilizator georgitTreista Georgiana georgit Data 4 iunie 2018 17:21:36
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>

using namespace std;
char s[1005],*exp;
int V[200];
int getexp();
int getterm();
int getfact();
int getfact()
{
    int nr=0;
    if(*exp==' ')
        exp++;
    if(*exp=='(')
    {
        exp++;
        nr=getexp();
        exp++;
        return nr;
    }
    if(*exp>='A' and *exp<='Z' and (*(exp+1)==' ' or *(exp+1)==')'))
    {
        nr=V[*exp];
        exp++;
        return nr;
    }
    if(*exp=='N' and *(exp+1)=='O')
    {
        exp=exp+3;
        nr=1-getfact();
        return nr;
    }
    if(*exp=='T' and *(exp+1)=='R')
    {
        nr=1;
        exp=exp+4;
        return nr;
    }
    if(*exp=='F' and *(exp+1)=='A')
    {
        nr=0;
        exp=exp+5;
        return nr;
    }

}
int getterm()
{
    int nr=getfact();
    if(*exp==' ')
        exp++;
    while(*exp=='A' and *(exp+1)=='N')
    {
        exp+=3;
        nr=nr&getfact();
        if(*exp==' ')
            exp++;
    }
    return nr;
}
int getexp()
{
    int nr=getterm();
    if(*exp==' ')
        exp++;
    while(*exp=='O' and *(exp+1)=='R')
    {
        exp+=2;
        nr=nr|getfact();
        if(*exp==' ')
            exp++;
    }
    return nr;
}
int main()
{
    ifstream f("bool.in");
    ofstream g("bool.out");
    f.get(s,1005);
    int n;
    f>>n;
    for(int i=1;i<=n;i++)
    {
        exp=s;
        char c;
        f>>c;
        V[c]=1-V[c];
        g<<getexp();
    }

    return 0;
}