Cod sursa(job #2030923)

Utilizator mihnea_infomihnea mihnea_info Data 2 octombrie 2017 15:15:24
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

int n, i, j, p;
bool v[30];
string s, c;

bool termAND();
bool factNOT();

bool evalOR ()
{
    while (s[p] == ' ')    p++;
    bool r = termAND();
    while (s[p] == 'O' && s[p+1] == 'R')
    {
        p += 2;
        if (s[p] == ' ')    p++;
        if (termAND() == 1 || r == 1)     r = 1;
        else r = 0;
    }
    return r;
}

bool  termAND ()
{
    if (s[p] == ' ')    p++;
    bool r = factNOT();
    while (s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D')
    {
        p += 3;
        if (s[p] == ' ')    p++;
        if (factNOT() == 1 && r == 1)   r = 1;
        else r = 0;
    }
    return r;
}

bool factNOT ()
{
    bool r = 0, k = 0;
    if (s[p] == ' ')    p++;
    while (s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T')
    {
        p += 3;
        if (k == 0)     k = 1;
        else k = 0;
        if (s[p] == ' ')    p++;
    }
    if (s[p] == '(')
    {
        p++;    if (s[p] == ' ')    p++;
        r = evalOR();
        p++;    if (s[p] == ' ')    p++;
    }

    if (s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E')
    {       p += 4;     r = 1;      }

    else if (s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E')
    {       p += 5;     r = 0;      }

    else if (s[p] >= 65 && s[p] <= 90 && s[p+1] != 'O' && (s[p+1] < 65 || s[p+1] > 90))
    {
        int x = s[p] - 64;
        r = v[x];   p++;
    }
    if (s[p] == ' ')    p++;

    if (r == 0 && k == 1)   r = 1;
    else if (r == 1 && k == 1)   r = 0;
    return r;
}

int main () {

    getline(fin, s);
    s[s.size()] = ' ';
    fin >> n;   getline(fin, c);
    getline(fin, c);

    int x = 0;
    for (i = 0; i < n; i++)
    {
        x = c[i] - 64;
        if (v[x] == 1)  v[x] = 0;
        else if (v[x] == 0) v[x] = 1;

        p = 0;
        fout << evalOR();
    }
}