Cod sursa(job #2528865)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 22 ianuarie 2020 18:29:09
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>

using namespace std;
char a[1010];
char b[1010];
int f[110];
char c;
int i,n,u;

void esteOperator() {
    if (a[i]=='A'&&a[i+1]=='N') {
        i+=3;
        b[u++]='&';
    }
    else if (a[i]=='O'&&a[i+1]=='R') {
        i+=2;
        b[u++]='|';
    }
    else if (a[i]=='N'&&a[i+1]=='O') {
        i+=3;
        b[u++]='!';
    }
    else if (a[i]=='T'&&a[i+1]=='R') {
        b[u++]='1';
        i+=4;
    }
    else if (a[i]=='F'&&a[i+1]=='A') {
        b[u++]='0';
        i+=5;
    }
    else if (a[i]=='('||a[i]==')'||isupper(a[i])) {
        b[u++]=a[i];
        i++;
    }
    else i++;
}

int Expresie();
int Termen();
int Factor();
int Factor1();

int main() {
    ifstream fin("bool.in");
    ofstream fout("bool.out");
    fin.get(a,1010);
    while (a[i]!=0) {
        esteOperator();
    }
    i=0;
 //   fout<<b;
    fin>>n;
    while(n--) {
        fin>>c;
        f[c-'A'+1]=1-f[c-'A'+1];
        i=0;
        fout<<Expresie();
    }
    return 0;
}

int Expresie() {
    int r=Termen();
    while (b[i]=='|') {
        i++;
        int n=Termen();
        if (r==1||n==1) r=1;
        else r=0;
    }
    return r;
}

int Termen() {
    int r=Factor();
    while (b[i]=='&') {
        i++;
        int n=Factor();
        if (r==1&&n==1) r=1;
        else r=0;
    }
    return r;
}

int Factor() {
    int r=0;
    if (b[i]=='!') {
        i++;
        r=1-Factor1();
    }
    else {
        i++;
        r=Factor1();
    }
    return r;
}

int Factor1() {
    int r;
    if (isupper(b[i])) {
        r=f[b[i]-'A'+1];
        i++;
    }
    else if (isdigit(b[i])) {
        r=b[i]-'0';
        i++;
    }
    else if (b[i]=='(') {
        i++;
        r=Expresie();
        i++;
    }
    return r;
}