Cod sursa(job #1153707)

Utilizator sorynsooSorin Soo sorynsoo Data 25 martie 2014 17:49:48
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
char v[1003],x;
int var[30];
int i,p=0,lim,n;
int expresie();
int termen();
int factor();
int main()
{
    cin.getline(v,1001); lim=strlen(v);
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>x;
        var[x-'A']=1-var[x-'A'];
        p=0;
        p=0;
        cout<<expresie();
    }
}
int expresie()
{
    int val=termen();
    while(p+1<lim && v[p]=='O' && v[p+1]=='R')
    {
        p+=3;
        val=val | factor();
    }
    return val;
}
int termen()
{
    int val=factor();
    while(p+2<lim && v[p]=='A' && v[p+1]=='N' && v[p+2]=='D')
    {
        p+=4;
        val= val & factor();
    }
    return val;
}
int factor()
{
    int semn=1,val=0;
    if(p+2<lim && v[p]=='N' && v[p+1]=='O' && v[p+2]=='T')
        while(p+2<lim && v[p]=='N' && v[p+1]=='O' && v[p+2]=='T')
        {
            p+=4;
            semn=-semn;
        }
    if(p+3<lim && v[p]=='T' && v[p+1]=='R' && v[p+2]=='U' && v[p+3]=='E')
    {
        p+=5;
        val=1;
        if(semn==1)
            return val;
        return 1-val;
    }
    if(p+4<lim && v[p]=='F' && v[p+1]=='A' && v[p+2]=='L' && v[p+3]=='S' && v[p+4]=='E')
    {
        p+=6;
        val=0;
        if(semn==1)
            return val;
        return 1-val;
    }
    if(v[p]=='(')
    {
        p++;
        val=expresie();
        p++;
        if(semn==1)
            return val;
        return 1-val;
    }
    val=var[v[p]-'A'];
    p+=2;
    if(semn==1)
        return val;
    return 1-val;
}