Cod sursa(job #1278415)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 28 noiembrie 2014 20:58:27
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
#define Lung 1006
#define Litere 137
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int n,j,i=0,poz[Litere];

char y,x[Lung];

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

int eval(){
    int r = termen();
    while(x[i+1] == 'O' && x[i+2] == 'R'){
        if(x[i+1] == 'O' && x[i+2] == 'R'){
            i += 4;
            if(termen() == 1 || r == 1)
                r = 1;
                else
                r = 0;
        }
    }
    return r;
}
int termen(){
    int r = factor();
    while(x[i+1] == 'A' && x[i+2] == 'N' && x[i+3] == 'D'){
        if(x[i+1] == 'A' && x[i+2] == 'N' && x[i+3] == 'D'){
            i += 5;
            if(factor() == 1 && r == 1)
                r = 1;
            else
                r = 0;
        }
    }
    return r;
}
int factor(){
    int r = 0;
    if(x[i] == '('){
        ++i;
        r = eval();
        ++i;
    }else
            if(x[i] == 'N' && x[i+1] == 'O' && x[i+2]== 'T'){
                i += 4;
                return (!factor());
            }else
                if(x[i] == 'T' && x[i+1] == 'R' && x[i+2] == 'U' && x[i+3] == 'E'){
                    i += 4;
                    r = 1;
                }else
                    if(x[i] == 'F' && x[i+1] == 'A' && x[i+2] == 'L' && x[i+3] == 'S' && x[i+4] == 'E'){
                        i += 5;
                        r = 0;
                    }else
                        if(x[i] <= 'Z' && x[i] >= 'A'){
                            if(poz[x[i]] == 0)
                                r = 0;
                                else
                                r = 1;
                            ++i;
                        }
    return r;
}
int main()
{
    f.getline(x,Lung);
    f >> n;
    f.get();
    for(j = 1; j <= n; j++){
        f >> y;
        i = 0;
        if(poz[y] == 0)
            poz[y] = 1;
        else
            poz[y] = 0;
        g << eval();
    }
    return 0;
}