Cod sursa(job #2320298)

Utilizator vladth11Vlad Haivas vladth11 Data 14 ianuarie 2019 16:54:50
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <fstream>
#include <cstring>
using namespace std;
ofstream cout("bool.out");
ifstream cin("bool.in");
int p = 0,n,j;
char v[1005],s[1005];
bool variabile[1005];
bool termen();
bool NOT();
bool nr();
bool expresie()
{

    bool rez = termen();
    //cout << rez;
    while(s[p] == '|')
    {
        p++;
        rez = rez | termen();
    }
    return rez;
}
bool termen()
{
    bool rez = NOT();
    while(s[p] == '&')
    {
        p++;
        rez = rez & NOT();
    }
    return rez;
}
bool NOT()
{

    if(s[p] == '!')
    {
        p++;
        return !NOT();
    }
    p++;
    return nr();
}
bool nr()
{
    bool rez;
    if(s[p] >= 'A' && s[p] <= 'Z')
    {

        rez = variabile[s[p] - 'A' + 1];
        p++;
    }
    else if(s[p] == '(')
    {
        p++;
        rez =  expresie();
        p++;
    }
    else if(s[p] == '1')
    {
        p++;
        return true;
    }else if(s[p] == '0'){
        p++;
        return false;
    }
    return rez;
}
int main()
{
    int i;
    cin.getline(v, 1005);

    int n = strlen(v);
    for(i = 0; i < n;)
    {
        if(v[i] == 'A' && v[i + 1] == 'N' && v[i+2] == 'D')
        {
            s[++j] = '&';
            i += 3;
        }
        else if(v[i] == 'O' && v[i + 1] == 'R')
        {
            s[++j] = '|';
            i+=2;
        }
        else if(v[i] == 'F' && v[i + 1] == 'A' && v[i+2] == 'L' && v[i+3] == 'S' && v[i+4] == 'E')
        {
            s[++j] = '0';
            i += 5;
        }
        else if(v[i] == 'T' && v[i+1] == 'R' && v[i+2] == 'U' && v[i+3] == 'E')
        {
            s[++j] = '1';
            i += 4;
        }
        else if(v[i] == 'N' && v[i+1] == 'O' && v[i+2] == 'T')
        {
            s[++j] = '!';
            i += 3;
        }
        else if(v[i] == '(')
        {
            s[++j] = '(';
            i++;
        }
        else if(v[i] == ')')
        {
            s[++j] = ')';
            i++;
        }
        else if(v[i] >= 'A' && v[i] <= 'Z')
        {
            s[++j] = v[i];
            i++;
        }
        else
        {
            i++;
        }
    }
    cin >> n;
    for(i = 1; i <= n; i++)
    {
        char ch;
        cin >> ch;
        p = 0;
        variabile[ch - 'A' + 1] ^= 1;
        cout << expresie();
    }

    return 0;
}