Cod sursa(job #1074734)

Utilizator Eby7Elena Obreja Eby7 Data 7 ianuarie 2014 21:52:23
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<fstream>
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 f=termen(),aux;
    while(i<lg&&s[i]=='O'&&s[i+1]=='R')
    {
        i+=3;
        aux=termen();
        f=aux||f;
    }
    return f;
}
int termen()
{
    int f=factor();
    while(i<lg && s[i]=='A' && s[i+1]=='N')
    {
        i+=4;
        f=f&&factor();
    }
    return f;
}
int factor()
{
    int f;
    if (s[i]=='(')
    {
        ++i;
        f=expr();
        ++i;
        if(s[i]==' ')
         i++;
    }
    else
    {
        f=val();
    }
    return f;
}
int val()
{
    int f;
    if (s[i]=='N'&&s[i+1]=='O')
    {
        i+=4;
        if (s[i]=='(')
        {
            i++;
            f=!expr();
            i++;
            if(s[i]==' ')
            i++;
        }
        else
         f=!val();
    }
    else
    if(s[i]=='T'&&s[i+1]=='R')
    {
        i+=4;
        if(s[i]==' ')
         i++;
        f=1;
    }
    else if(s[i]=='F'&&s[i+1]=='A')
    {
        i+=5;
        if(s[i]==' ')
         i++;
        f=0;
    }
    else
    {
        f=v[s[i]-'A'];
        i++;
        if(s[i]==' ')
         i++;
    }
    return f;
}