Cod sursa(job #2208536)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 30 mai 2018 11:08:52
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
int f[28], n;
string s;
char ch;
bool Expresie(char* &s);
void skip_spaces(char* &s){
    while (*s == ' ') s ++;
}
bool Termen(char* &s){
    if (*s == 'F' && *(s + 1) == 'A'){
        if (*(s + 2) == 'L' && *(s + 3) == 'S'){
            if (*(s + 4) == 'E'){
                s += 5;
                return 0;
            }
        }
    }
    else if (*s == 'T' && *(s + 1) == 'R'){
        if (*(s + 2) == 'U' && *(s + 3) == 'E'){
            s += 4;
            return 1;
        }
    }
    else if (*s == '('){
        s ++;
        Expresie (s);
        s ++;
    }
    else if (isalpha (*s)) return f [*s - 'A'];
}
bool Not (char* &s){
    bool nu = 0;
    skip_spaces (s);
    while  (*s == 'N' && *(s + 1) == 'O' && *(s + 2) == 'T'){
        s += 3;
        nu = 1 - nu;
        skip_spaces (s);
    }
    if (nu == 0) return Termen (s);
    return 1 - Termen (s);
}
bool ands (char* &s){
    bool val = Not(s);
    skip_spaces(s);
    while (*s == 'A' && *(s + 1) == 'N'){
        if (*(s + 2) == 'D'){
            s += 3;
            skip_spaces (s);
            val &= Not (s);
            skip_spaces (s);
        }
    }
    return val;
}
bool Expresie (char* &s){
    bool val = ands (s);
    skip_spaces (s);
    while (*s == 'O' && *(s + 1) == 'R'){
        s += 2;
        skip_spaces (s);
        val |= ands (s);
        skip_spaces (s);
    }
    return val;
}
int main (void){
    while (fin.get (ch)){
        if (ch == '\n')
            break;
        s += ch;
    }
    s += '\0';
    fin >> n;
    for (int i = 1; i <= n; i ++){
        fin >> ch;
        f [ch - 'A'] = 1 - f [ch - 'A'];
        char *sir = &s[0];
        fout << Expresie(sir);
    }
    return (0);
}