Cod sursa(job #1911920)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 7 martie 2017 22:14:02
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <cstring>
#define CAR 105
#define VAL 1005

using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");

int N, i, j;
int v[CAR];
char s[VAL], *P;
string chng;

int evaluare();
int termen();
int factor();

int comute(int x)
{
    if (x==0)
      return 1;
    else
      return 0;
}

int evaluare()
{
    int nr=termen();
    while (*P==' ')
      P++;
    while (*P=='O' && *(P+1)=='R')
    {
        P+=2;
        nr=(nr | termen());
        while (*P==' ')
          P++;
    }
    return nr;
}

int termen()
{
    int nr=factor();
    while (*P==' ')
      P++;
    while (*P=='A' && *(P+1)=='N' && *(P+2)=='D')
    {
        P+=3;
        nr=(nr & factor());
        while (*P==' ')
          P++;
    }
    return nr;
}

int factor()
{
    int nr=0;
    while (*P==' ')
      P++;
    if (*P=='(')
    {
        P++;
        nr=evaluare();
        P++;
    }
    else
    {
        if (*P>='A' && *P<='Z' && (*(P+1)>='Z' || *(P+1)<='A'))
        {
            nr=v[*P];
            P++;
        }
        else
        {
            if (*P=='T' && *(P+1)=='R')
            {
                nr=1;
                P+=4;
            }
            else
            {
                if (*P=='F' && *(P+1)=='A')
                {
                    nr=0;
                    P+=5;
                }
                else
                {
                    if (*P=='N' && *(P+1)=='O')
                    {
                        P+=3;
                        nr=comute(factor());
                    }
                }
            }
        }
    }
    return nr;
}

int main()
{
    fin.get(s, VAL, '\n');
    fin.get();
    fin >> N;
    fin >> chng;
    for (i=0; i<N; i++)
    {
        P=s;
        v[chng[i]]=comute(v[chng[i]]);
        fout << evaluare();
    }
    fin.close();
    fout.close();
    return 0;
}