Cod sursa(job #1553192)

Utilizator andreiudilaUdila Andrei andreiudila Data 19 decembrie 2015 13:11:30
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <string.h>
using namespace std;

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

char s[1005];
int i,lg;
int val[30];
char op[300];

int evalexpr();
int evalterm();

int evaluare()
{
    int rez;
    if(i+4 <lg && s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
    {
        i=i+4;
        rez=evalterm();
        rez=1-rez;
        return rez;
    }

    if(i+3 <lg && s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
    {
        i+=4;
        return 1;
    }

    if(i+4 <lg && s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
    {
        i+=5;
        return 0;
    }

    rez=val[s[i]-'A'];

    i++;

    return rez;
}

int evalterm()
{
    if(s[i]=='(')
    {
        i++;

        int rez=evalexpr();

        i++;

        return rez;
    }

    int rez=evaluare();

    return rez;
}

int evaland()
{
    int x,rez=evalterm();

    while(i+4<lg && s[i]==' ' && s[i+1]=='A' && s[i+2]=='N' && s[i+3]=='D')
    {
        i+=5;
        x=evalterm();
        rez=rez && x;
    }

    return rez;
}

int evalexpr()
{
    int x,rez=evaland();

    while(i+3<lg && s[i]==' ' && s[i+1]=='O' && s[i+2]=='R')
    {
        i+=4;
        x=evaland();
        rez=rez || x;
    }

    return rez;
}

int main()
{
    int n,j;

    fin.getline(s,1005);

    lg=strlen(s);

    fin>>n;

    fin.get();

    fin.getline(op,300);

    for(j=0; j<n; j++)
    {
        val[op[j]-'A']=1-val[op[j]-'A'];
        i=0;
        fout<<evalexpr();
    }

}