Cod sursa(job #2370269)

Utilizator MDiana15Diana M MDiana15 Data 6 martie 2019 11:25:14
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
int N , i  = 0  , k ;
int Q , fv[100];
char c;
char s[1010];

bool eval() ;

bool termen() ;
bool factor() ;

bool eval()
{
    bool r = termen() ;

    while (s[i] == 'O' && s[i+1] == 'R')
    {
        i += 2;
        r = (r | termen()) ;
    }

    return r;
}
bool termen()
{
        bool r = factor() ;

        while (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
        {
            i += 3;
            r = (r & factor()) ;
        }

        return  r;

}


bool factor()
{
            bool r = 0 ;
            if (s[i] == '(')
            {
                i ++ ;
                r = eval() ;
                i ++ ;
            }
            else
            {
                if (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
                {
                    i += 3 ;
                    r = 1 - factor() ;
                }
                else if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
                {
                    i += 4;
                    r = true;
                }
                else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
                {
                    i += 5 ;
                    r = false;
                }
                else {
                    r = fv[s[i]-'A'+1];
                    i ++ ; }
            }
            return r;

}

int main()
{

    f.getline(s,1002) ;
    k = strlen(s);
    f >> Q ;
    for ( i =  0 ; i < k ; ++i)
    {
            if (s[i] == ' ')
                strcpy(s + i , s + i  + 1) ;
    }


    memset(fv, 0 , sizeof(fv));
     for (int q = 1 ; q <= Q ; ++q)
    {
        f >> c;
        i = 0 ;


        if (fv[c-'A'+1] == 1) fv[c-'A'+1] = 0;
        else fv[c-'A'+1] = 1 ;
       // g << c << ' ' << fv[c-'A'+1] << '\n' ;
       g << eval();
    }

}