Cod sursa(job #1066286)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 24 decembrie 2013 14:45:05
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <fstream>
#include <cstring>

using namespace std;

int i,n,k,t;
char s[1005];
char ch;
bool ok[200];

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

bool expresie()
{
    bool r=termen();
    while(s[i]=='|')
    {
        i++;
        if(r || termen())
            r=1;
        else
            r=0;
    }
    return r;
}

bool termen()
{
    bool r=factor();
    while(s[i]=='&')
    {
        i++;
        if(r && factor())
            r=1;
        else
            r=0;
    }
    return r;
}

bool factor()
{
    bool r;
    if(s[i]=='!')
    {
        i++;
        return(!(factor()));
    }
    else
    if(s[i]=='(')
       {
            i++;
            r=expresie();
            i++;
            return r;
       }
    else
    if(s[i]=='1')
    {
        i++;
        return 1;
    }
    else
    if(s[i]=='0')
    {
        i++;
        return 0;
    }
    else
    if(s[i]>='A' && s[i]<='Z')
    {
        i++;
        return ok[s[i-1]-'A'];
    }
}

int main()
{
    ifstream f("bool.in");
    ofstream g("bool.out");
    f.get(s,1005);
    for(i=0;s[i]!=0;i++)
    {
        if(s[i]=='T' && s[i+1]=='R')
        {
            s[i]='1';
            strcpy(s+i+1,s+i+4);
        }
        else
        if(s[i]=='F' && s[i+1]=='A')
        {
            s[i]='0';
            strcpy(s+i+1,s+i+5);
        }
        else
        if(s[i]=='O' && s[i+1]=='R')
        {
            s[i]='|';
            strcpy(s+i+1,s+i+2);
        }
        else
        if(s[i]=='A' && s[i+1]=='N')
        {
            s[i]='&';
            strcpy(s+i+1,s+i+3);
        }
        else
        if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
        {
            s[i]='!';
            strcpy(s+i+1,s+i+3);
        }
    }
    for(i=0;s[i]!=0;i++)
        if(s[i]==' ')
        {
            strcpy(s+i,s+i+1);
        }
    f.get();
    f>>n;
    f.get();
    for(t=1;t<=n;t++)
    {
        f>>ch;
        i=0;
        if(ok[ch-'A'])
            ok[ch-'A']=0;
        else
            ok[ch-'A']=1;
        if(expresie())
            g<<'1';
        else
            g<<'0';
    }
    f.close();g.close();
    return 0;
}