Cod sursa(job #1576963)

Utilizator savigunFeleaga Dragos-George savigun Data 23 ianuarie 2016 02:09:37
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

int v[101], p;
char s[1001];

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=sau(r, termen());
    }
    return r;
}

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

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

int factor()
{
    int r, 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]==0 || s[p]==1)
    {
        p++;
        if(no==1)
            return !r;
        return r;
    }
    if(s[p]>='A' && s[p]<='Z')
    {
        if(no==1)
            v[s[p]]=!v[s[p]];
        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;

cout<<s<<endl;

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


    return 0;
}