Cod sursa(job #2209755)

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

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