Cod sursa(job #1872030)

Utilizator savigunFeleaga Dragos-George savigun Data 7 februarie 2017 21:28:35
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.56 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

int v[102], p;
char s[1006];

int expresie();
int termen();
int factor();

int sau(int a, int b)
{
    if(a==0 && b==0)
        return 0;
    return 1;
}
int si(int a, int b)
{
    if(a==1 && b==1)
        return 1;
    return 0;
}

int expresie()
{
    int r = termen();

    while(s[p]=='|')
    {
        p++;
        r |= termen();
    }
    return r;
}

int termen()
{
    int r = factor();

    while(s[p]=='&')
    {
        p++;
        r &= termen();
    }
    return r;
}

int factor()
{
    int r = 0, no = 0;
    while (s[p] == '!')
    {
        no = !no;
        p++;
    }
    if(s[p]=='(')
    {
        p++;
        r = expresie();
        p++;

        if (no==1)
            return !r;
        return r;
    }
    if (s[p] == '1') {
        p++;
        if (no == 1)
            return 0;
        return 1;
    }
    if (s[p] == '0') {
        p++;
        if (no == 1)
            return 1;
        return 0;
    }
    if (s[p]>='A' && s[p]<='Z')
    {
        if(no == 1)
            r = !v[s[p]];
        else
            r = v[s[p]];
        p++;
        return r;
    }

}

int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");

int i, n, j=0;
char a[1001], c;
cin.get(a, 1001);
n = strlen(a);

for(i = 0; i < n; i++)
{
    if(a[i]!=' ')
    {
        if(a[i]=='A')
        {
            if(a[i+1]=='N')
            {
                s[j++]='&';
                i+=2;
            }
            else s[j++]=a[i];
        }else if(a[i]=='O')
        {
            if(a[i+1]=='R')
            {
                s[j++]='|';
                i+=1;
            }
             else s[j++]=a[i];
        }else if(a[i]=='N')
        {
            if(a[i+1]=='O')
            {
                s[j++]='!';
                i+=2;
            }
             else s[j++]=a[i];
        }else if(a[i]=='T')
        {
            if(a[i+1]=='R')
            {
                s[j++]='1';
                i+=3;
            }
             else s[j++]=a[i];
        }else if(a[i]=='F')
        {
            if(a[i+1]=='A')
            {
                s[j++]='0';
                i+=4;
            }
             else s[j++]=a[i];
        }
         else s[j++]=a[i];
    }
}

s[j] = NULL;
cin >> n;

for (i = 1; i <= n;i++)
{
    cin >> c;
    if(v[c] == 0)
        v[c] = 1;
    else
        v[c] = 0;

    p = 0;
    cout<<expresie();

}


    return 0;
}