Cod sursa(job #2209088)

Utilizator ElizaTElla Rose ElizaT Data 1 iunie 2018 18:19:12
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <bits/stdc++.h>

using namespace std;

char s[1005];
bool val[30];
string v;
int poz;
bool numar();
bool inm_imp();
bool evaluare()
{
    bool nr = numar();
    if (v[poz] != '&' && v[poz] != '|' && v[poz] != '~')
        poz++;
    while (v[poz] == '&' || v[poz] == '|' || v[poz] == '~')
    {
        if (v[poz] == '&')
        {
            nr = (nr & numar());
            poz++;
        }
        else if (v[poz] == '|')
        {
            nr = (nr | numar());
            poz++;
        }
        else
        {
            poz++;
            nr = inm_imp();
        }
        //poz++;
    }
    return nr;
}
bool numar()
{
    bool nr;
    if (v[poz] == '(')
    {
        poz++;
        nr = evaluare();
        poz++;
    }
    else if (v[poz] == '~')
    {
        poz++;
        nr = inm_imp();
        //inm_imp();
        poz++;
    }
    else if (v[poz] >= 'A' && v[poz] <= 'Z')
        nr = val[(v[poz] - 'A')];
    return nr;
}
bool inm_imp()
{
    bool nr = numar();
    return (~ nr);
}
int main()
{
    ifstream fin("bool.in");
    ofstream fout("bool.out");
    int poz1 = 0,n;
    char ch;
    s[poz1] = ' ';
    while (s[poz1] != '\n')
    {
        poz1++;
        fin.get(s[poz1]);
    }
    for (int i = 0;i < poz1;i++)
    {
        if (s[i] == 'A' && s[i + 1] == 'N')
            v += '&';
        else if (s[i] == 'O' && s[i + 1] == 'R')
            v += '|';
        else if (s[i] == 'N' && s[i + 1] == 'O')
            v += '~';
        else if (s[i] >= 'A' && s[i] <= 'Z')
            v += s[i];
        else if (s[i] == '(' || s[i] == ')')
            v += s[i];
    }
    fin >> n;
    for (int i = 0;i < n;i++)
    {
        fin >> ch;
        if (val[(ch - 'A')] == 0)
            val[(ch - 'A')] = 1;
        else
            val[(ch - 'A')]= 0;

        poz = 0;
        fout << evaluare();
    }
    return 0;
}