Cod sursa(job #603538)

Utilizator andrianAndrian andrian Data 17 iulie 2011 08:26:35
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

char a[1005];
int n;
bool v[110];

char c[10];


void cuvint(int& x)
{
    int i;
    for(;a[x] == ' ';++x);
    for(i=x;a[i] != ' ' && a[i] != '\0' && a[i] != ')';++i)
        c[i-x] = a[i];
    c[i-x] = '\0';
    x = i;
}
bool eq(char c1[])
{
    for(int i=0;i<(int)strlen(c1);++i)
    if(c1[i] != c[i]) return false;
    return true;
}
bool eval(int& x);
bool eval1(int& x);
bool factor(int& x)
{
    for(;a[x] == ' ' || a[x] == ')';++x);
    if(a[x] == '(')
    {
        ++x;
        bool p = eval(x);
        ++x;
        return p;
    }
    else
    {
        cuvint(x);
        if(eq("TRUE"))
            return true;
        if(eq("FALSE"))
            return false;
        if(eq("NOT"))
            return !factor(++x);
        return v[c[0]];

    }
    return false;
}

bool eval1(int& x)
{
    bool f1=factor(x);
    cuvint(x);
    bool f2=factor(x);
    if(eq("AND"))
        return f1 && f2;
    return f1;
}

bool eval(int& x)
{
    bool f1 = eval1(x);
    cuvint(x);
    bool f2 = eval1(x);
    if(eq("OR"))
        return f1 || f2;
    return f1;
}

int main()
{
    ifstream in("bool.in");
    in >> noskipws;
    for(int i=0;in && !in.eof() && (in >> a[i]) && a[i]!= '\n';++i);
    a[strlen(a)-1] = '\0';
    ofstream out("bool.out");
    in >>skipws >> n;
    char c;
    for(;n;--n)
    {
        in >> c;
        v[c] =  !v[c];
        int i=0;
        out << eval(i);
    }
    return 0;
}