Cod sursa(job #1912067)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 7 martie 2017 22:52:53
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 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();
    if (*P==' ')
      P++;
    while (*P=='O' && *(P+1)=='R')
    {
        P+=2;
        nr=(nr | termen());
        if (*P==' ')
          P++;
    }
    return nr;
}

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

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

int main()
{
    fin.get(s, VAL, '\n');
    fin.get();
    strcat(s, " ");
    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;
}