Cod sursa(job #1008365)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 10 octombrie 2013 21:48:34
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>

using namespace std;

char sir[1005], instr[105];
int n,val[500],poz;

int eval();
int termen();
int factor();

inline int eval()
{
    int sol;
    sol=termen();
    while(sir[poz]=='A' && sir[poz+1]=='N')
    {
        poz+=4;
        sol&=termen();
    }
    return sol;
}

inline int termen()
{
    int sol;
    sol=factor();
    while(sir[poz]=='O' && sir[poz+1]=='R')
    {
        poz+=3;
        sol|=factor();
    }
    return sol;
}

inline int factor()
{
    int sol;
    if(sir[poz]=='(')
    {
        poz++;
        sol=eval();
        poz++;
    }
    else
        if(sir[poz]=='N' && sir[poz+1]=='O')
        {
            poz+=4;
            sol=1-factor();
        }
        else
            if(sir[poz]=='T' && sir[poz+1]=='R')
            {
                poz+=5;
                sol=1;
            }
            else
                if(sir[poz]=='F' && sir[poz+1]=='A')
                {
                    poz+=6;
                    sol=0;
                }
                else
                {
                    sol=val[sir[poz]-'A'];
                    poz+=2;
                }
    return sol;
}

int main()
{
    int i;
    ifstream fin("bool.in");
    fin.getline(sir, 1005);
    fin>>n;fin.get();
    fin.getline(instr, 105);
    ofstream fout("bool.out");
    for(i=0;i<n;i++)
    {
        val[sir[i]-'A']=1-val[sir[i]-'A'];
        poz=0;
        fout<<eval();
    }
    fout<<"\n";
    fout.close();
    return 0;
}