Cod sursa(job #3139987)

Utilizator SSKMFSS KMF SSKMF Data 3 iulie 2023 09:49:49
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
using namespace std;

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

char sir[1001] , *pozitie;
bool valori[26];

bool Expresie (int);

void Eliminare ()
{
    while (*pozitie == ' ')
        pozitie++;
}

bool Termen ()
{
    Eliminare();

    bool termen;
    if (*pozitie == '(') 
        pozitie++ , termen = Expresie(0) , pozitie++;
    else
        if (*pozitie == 'N' && *(pozitie + 1) == 'O' && *(pozitie + 2) == 'T') {
            pozitie += 3; Eliminare();
            termen = !valori[*pozitie - 'A'];
            pozitie++;
        }
    else
        if (*pozitie == 'T' && *(pozitie + 1) == 'R')
            termen = true , pozitie += 4;
    else
        if (*pozitie == 'F' && *(pozitie + 1) == 'A')
            termen = false , pozitie += 5;
    else
        termen = valori[*pozitie - 'A'] , pozitie++;

    return termen;
}

bool Valid (int adancime)
{
    Eliminare();

    if (adancime == 0)
    {
        if (*pozitie == 'A' && *(pozitie + 1) == 'N' && *(pozitie + 2) == 'D') {
            pozitie += 3; return true;
        } else return false;
    }
    
    if (*pozitie == 'O' && *(pozitie + 1) == 'R') {
        pozitie += 2; return true;
    } else return false;
}

bool Expresie (int adancime)
{
    bool rezultat;
    if (!adancime) rezultat = Expresie(1);
    else rezultat = Termen();
    while (Valid(adancime)) {
        int termen;
        if (!adancime) termen = Expresie(1);
        else termen = Termen();
        if (adancime == 0) rezultat = rezultat && termen;
        else rezultat = rezultat || termen;
    }

    return rezultat;
}

int main ()
{
    cin.getline(sir , 1001);

    int schimbari;
    cin >> schimbari;

    char litera;
    for (int indice = 1 ; indice <= schimbari ; indice++) {
        cin >> litera; pozitie = sir;
        valori[litera - 'A'] = !valori[litera - 'A'];
        cout << Expresie(0);
    }

    cout.close(); cin.close();
    return 0;
}