Cod sursa(job #1335836)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 5 februarie 2015 22:36:21
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

ifstream in("bool.in");
ofstream out("bool.out");

const int MAXN = 1000;

char s[MAXN+1], *p;
int N;
bool state[MAXN+1];

bool evalueaza();
bool termen();
bool factor();

void readData()
{
    in.getline(s,MAXN);
    in>>N;
    for(int i = 0; i <= 27; i++)
        state[ i ] = false;
    for(int i = 1; i <= N; i++)
    {
        char x;
        in>>x;
        p = s;
        state[ x - 'A' ] = !state[ x - 'A' ];
        out<<evalueaza();
    }
}

bool evalueaza()
{
    bool r = termen();
    if( *p == ' ' )
        p++;
    while( *p == 'O' && *(p + 1) == 'R' )
    {
        p+=2;
        bool f = termen();
        r = r | f;
    }

    return r;
}

bool termen()
{
    bool r = factor();
    if( *p == ' ' )
        p++;
    while( *p == 'A' && *(p + 1) == 'N' )
    {
        p+=3;
        bool t = factor();
        r = r & t;
    }

    return r;
}

bool factor()
{
    bool r;

    if( *p == ' ' )
    {
        p++;
    }

    if( *p == '(' )
    {
        p++;
        r = evalueaza();
        p++;
    }
    else
    if( *p == 'N' && *( p + 1 ) == 'O' )
    {
        p +=3;
        r = !evalueaza();
    }
    else
    {
        if( *p == 'T' && *(p + 1) == 'R' )
        {
            r = true;
            p += 4;
        }
        else
        if( *p == 'F' && *(p + 1) == 'A' )
        {
            r = false;
            p += 5;
        }
        else
        {
            r = state[ *p - 'A' ];
            p++;
        }
    }

    return r;
}


int main()
{
    readData();

    //evalueaza();
    return 0;
}