Cod sursa(job #1075563)

Utilizator Eby7Elena Obreja Eby7 Data 9 ianuarie 2014 10:44:37
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int v[100],n,lg=-1,i;
char s[1001],bau,c;
int factor();
int termen();
int val();
int expr();
int main()
{
    f>>c;
    while(c!='\n')
    {
        s[++lg]=c;
        f>>c;
    }
    f>>n;
    for(int z=1; z<=n; z++)
    {
        f>>bau;
        v[bau-'A']=!v[bau-'A'];
        i=0;
        g<<expr();
    }
    return 0;
}

int expr()
{
    int h=termen(),aux;
    while(i<lg&&s[i]=='O'&&s[i+1]=='R')
    {
        i+=3;
        aux=termen();
        h=aux||h;
    }
    return h;
}
int termen()
{
    int h=factor();
    while(i<lg&&s[i]=='A'&&s[i+1]=='N')
    {
        i+=4;
        h=h&&factor();
    }
    return h;
}
int factor()
{
    int h;
    if (s[i]=='(')
    {
        ++i;
        h=expr();
        ++i;
        if(s[i]==' ')
         i++;
    }
    else
    {
        h=val();
    }
    return h;
}
int val()
{
    int h;
    if (s[i]=='N'&&s[i+1]=='O')
    {
        i+=4;
        if (s[i]=='(')
        {
            i++;
            h=!expr();
            i++;
            if(s[i]==' ')
            i++;
        }
        else
         h=!val();
    }
    else
    if(s[i]=='T'&&s[i+1]=='R')
    {
        i+=4;
        if(s[i]==' ')
         i++;
        h=1;
    }
    else if(s[i]=='F'&&s[i+1]=='A')
    {
        i+=5;
        if(s[i]==' ')
         i++;
        h=0;
    }
    else
    {
        h=v[s[i]-'A'];
        i++;
        if(s[i]==' ')
         i++;
    }
    return h;
}