Cod sursa(job #1235151)

Utilizator cristinamateiCristina Matei cristinamatei Data 28 septembrie 2014 20:53:44
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>

using namespace std;
ofstream out("bool.out");
char e[1001];
int lit[28];

int expresie();
int termen();
int factor();
int p;

int expresie()
{
    int val = termen();
    if( e[p+2] == 'O' && e[p+3] == 'R' ){
        p+=5;
        if ( val == 1 ){
            p+=2;
            return 1;
        }
        else{
            if ( termen() == 1 ){
                    p+=2;
                    return 1;
            }
            else{
                p+=2;
                return 0;
            }
        }
    }
    return val;
}

int termen()
{
    int val=factor();
    if( e[p+2] == 'A' && e[p+3] == 'N' ){
        p+=6;
        if ( val == factor() ){
            p+=2;
            return 1;
        }
        else{
            p+=2;
            return 0;
        }
    }
    return val;
}

int factor()
{
    int val=lit[e[p] -'A' + 1 ];
    if ( e[p] == '(' ){
                p++;
                val = expresie();
                p++;
            }
    if( e[p] == 'N' && e[p+1] == 'O' ){
        p+=4;
        if ( e[p] == '(' ){
                p++;
                val = expresie();
                p++;
            }
        if ( lit[e[p] -'A' + 1 ]== 0 )
            return 1;
        else return 0;
    }
    if ( e[p] == 'T' && e[p+1] =='R' ){
        p+=4;
        return 1;
    }
    if ( e[p] == 'F' && e[p+1] == 'A' ){
        p+=5;
        return 0;
    }
    return val;
}

int main()
{
    ifstream in("bool.in");
    in.getline(e,1001,'\n');
    int n;
    char x;
    in >> n;
    for ( int i = 1; i <= n; i++ ){
        in >> x;
        if ( lit[x - 'A' + 1] == 0 )
            lit[x - 'A' + 1] = 1;
        else lit[x - 'A' + 1] = 0;
        p = 0;
        out << expresie();
    }
    return 0;
}