Cod sursa(job #603431)

Utilizator andrianAndrian andrian Data 16 iulie 2011 10:13:08
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

char a[1000];
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';++i)
        c[i-x] = a[i];
    c[i-x] = '\0';
    x = i;
}
bool eq(char c1[])
{
    for(int i=0;i<strlen(c1);++i)
    if(c1[i] != c[i]) return false;
    return true;
}
bool eval(int& x);
bool factor(int& x)
{
    for(;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 eval(int& x)
{
    bool f1 = factor(x);
    cuvint(x);
    if(eq("AND"))
        return f1 && factor(x);
    if(eq("OR"))
        return f1 || factor(x);
    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;
        cout << eval(i);
    }
    return 0;
}