Cod sursa(job #1411908)

Utilizator maribMarilena Bescuca marib Data 1 aprilie 2015 00:14:36
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <cstring>
using namespace std;

char exp[1005], ch;

short poz, lung, v[28], n;

bool termen();

bool tree();

bool termen(){
    bool res;
    if(exp[poz]=='N'){
        poz+=4;
        res=!(termen());
    }
    else if(exp[poz]=='('){
        poz++;
        res=tree();
        poz++;
    }
    else if(exp[poz]=='T'&&exp[poz+1]=='R'){
        poz+=4;
        res=true;
    }
    else if(exp[poz]=='F'&&exp[poz+1]=='A'){
        poz+=5;
        res=false;
    }
    else{
        res=v[(int)exp[poz]-65];
        poz+=1;
    }
    return res;
}

bool tree(){
    bool res;
    res=termen();
    while(poz<lung&&(exp[poz]=='A'||exp[poz]=='O'||exp[poz]==' ')){
        if(exp[poz]=='A'){
            poz+=4;
            res=res&(termen());
        }
        else if(exp[poz]=='O'){
            poz+=3;
            res=res|(termen());
        }
        else poz++;
    }
    return res;
}

int main()
{
    ifstream in("bool.in");
    ofstream out("bool.out");
    in.get(exp, 1001);
    lung=strlen(exp);
    in>>n;
    in.get();
    for(int i=1; i<=n; ++i){
        ch=in.get();
        v[(int)ch-65]=1-v[(int)ch-65];
        poz=0;
        out<<tree();
    }
    in.close();
    out.close();
    return 0;
}