Cod sursa(job #1572789)

Utilizator Firealex2Rotileanu Alexandru Firealex2 Data 19 ianuarie 2016 09:36:45
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

ifstream fi("bool.in");
ofstream fo("bool.out");

bool expresie();
bool termen();
bool factor();
bool bucata();

string s;
int p, vector[200];//tot vectorul o sa fie 0 initial ._.
char aux[2000];
int main()
{
    getline(fi, s);
        int n, i, k = 0;
    n = s.length();
    for (i = 1; i <= 26; i++)
        vector[i] = 1;
    for (i = 0; i < n; i++)
    {
        if (s[i] == 'A' && s[i + 1] == 'N')
        {
            aux[k++] = '&';
            i += 2;
        }
        else if (s[i] == 'O' && s[i + 1] == 'R')
        {
            aux[k++] = '|';
            i++;
        }
        else if (s[i] == 'N' && s[i + 1] == 'O')
        {
            aux[k++] = '!';
            i += 2;
        }
        else if (s[i] == 'T' && s[i+1] == 'R')
            aux[k++] = '1';
        else if (s[i] == 'F' && s[i+1] == 'A')
            aux[k++] = '0';
        else if (s[i] != ' ')
            aux[k++] = s[i];
    }
    int numar;
    fi >> numar;
    for (i = 1; i <= numar; i++)
    {
        char b;
        fi >> b;
        if (vector[b - 'A'] == 0)
            vector[b - 'A'] = 1;
        else vector[b - 'A'] = 0;
        fo << expresie();
        p = 0;
    }

    return 0;
}

bool expresie()
{
    bool s = termen();
    int d;
    while (aux[p] == '|')
    {
        p++;
        s = s||termen();
    }
    return s;
}
bool termen()
{
    bool q = factor();
    int d;
    while (aux[p] == '&')
    {
        p++;
        q=q&&factor();
    }
    return q;
}
bool factor()
{
    bool q;
    int d;
    while (aux[p] == '!')
    {
        p++;
        q=!factor();
        return q;
    }
    bool val;
    if (aux[p] == '('){
        p++;
        val = expresie();
        p++;
        return val;
    }
    else if(aux[p]=='1'){p++; return true;}
    else if(aux[p]=='0'){p++;return false;}
    else val = vector[aux[p] - 'A'];
    p++;
    return val;

}