Cod sursa(job #1679800)

Utilizator GreeDGlavan George Florian GreeD Data 8 aprilie 2016 11:22:27
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

bool vExpresii[30];
char expresie[1001];
char* p=expresie;

bool f0();
bool f1();
bool f2();

bool f0(){
    bool b=f1();
    while(*p=='O'&&*(p+1)=='R'){

        p+=2;


        b=b || f1();

    }
    return b;
}

bool f1(){
    bool b=f2();
    while(*p=='A'&&*(p+1)=='N'&&*(p+2)=='D'){

        p=p+3;

        b=b && f2();

    }
    return b;
}

bool f2(){
    bool b=false;
        if(*p=='('){
            p++;
            return f0();
            p++;
       }else if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E'){

            return true;
            p+=4;
        }else if(*p=='F' && *(p+1)=='A' && *(p+1)=='L' && *(p+2)=='S' && *(p+3)=='E'){

            return false;
            p+=5;

        }else if(*p=='N' && *(p+1)=='O' && *(p+2)=='T'){
            p+=3;
            return !f0();
        }else{
            b=vExpresii[*p-65];

            p++;

        }

    return b;
}

int main()
{
    char valori[100];
    int N;
    char c[2];
    FILE* f=fopen("bool.in","r");
    FILE* g=fopen("bool.out","w");
    fgets(expresie,1001,f);
    fgets(c,1,f);
    fscanf(f,"%d %s",&N,&valori);
    for(int i=0;i<strlen(expresie);i++){
        if(expresie[i]==' '){
            strcpy(expresie+i,expresie+i+1);
        }
    }
    for(int i=0;i<30;i++){
        vExpresii[i]=false;
    }
    for(int i=0;i<N;i++){
        vExpresii[valori[i]-65]=!vExpresii[valori[i]-65];
        p=expresie;
        bool b=f0();
        fprintf(g,"%d",b);
    }
    return 0;
}