Cod sursa(job #1679718)

Utilizator GreeDGlavan George Florian GreeD Data 8 aprilie 2016 10:34:52
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 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();
    if(*p=='O'&&*(p+1)=='R'){

        p+=2;
        if(*(p)==' '){
            p++;
        }

        b=b || f1();

    }
    return b;
}

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

        p=p+3;
        if(*(p)==' '){
            p++;
        }

        b=b && f2();

    }
    return b;
}

bool f2(){
    bool b=false;
    if(*p=='('){
        p++;
        b=f0();
        p++;
       }else{
        if(*p>='A' && *p<='Z' && *(p+1)==' '){
            b=vExpresii[*p-65];

            p+=1;
        if(*(p)==' '){
            p++;
        }

        }else if(*p=='T' && *(p+1)=='R'){

            b=true;
            p+=4;
        if(*(p)==' '){
            p++;
        }
        }else if(*p=='F' && *(p+1)=='A'){

            b=false;
            p+=5;
        if(*(p)==' '){
            p++;
        }

        }else if(*p=='N' && *(p+1)=='O'){

            p+=3;
        if(*(p)==' '){
            p++;
        }

            b=!(vExpresii[*(p+1)-65]);
            p+=1;
        }
       }

    return b;
}

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