Cod sursa(job #1510634)

Utilizator Julian.FMI Caluian Iulian Julian. Data 25 octombrie 2015 13:32:09
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <string.h>
#include <fstream>
#define nmax 1005
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

char s[nmax];
int i,lg;
int val[30];

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;
char op[300];
    fin.getline(s,nmax);
    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();
    }

}