Cod sursa(job #1348134)

Utilizator andi12Draghici Andrei andi12 Data 19 februarie 2015 15:31:32
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdio>

using namespace std;
char s1[1005];
char s[1005];
char v[101];
int p;
bool vec[50];
bool exp();
bool termen();
bool si();
bool fc(bool x)
{
    if(x==true)
        return false;
    else
        return true;
}
bool si(bool val)
{
    bool a=val;
    a=val & termen();
    return a ;
}
bool exp()
{
    bool val=termen();
    if(s[p]=='O' && s[p+1]=='R')
    {
        p=p+2;
        val=val | termen();
        return val;
    }
    if(s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
    {
        p=p+3;
        val=si(val);
        return val;
    }
}
bool termen()
{
    bool val,semn=0;
    if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
    {
        p=p+3;
        semn=fc(semn);
    }
    if(s[p]=='T' && s[p+1]=='R')
    {
        p=p+4;
        val=true;
        return val;
    }
    if(s[p]=='F' && s[p+1]=='A')
    {
        p=p+5;
        val=false;
        return val;
    }
    if(s[p]=='(')
    {
        p++;
        val=exp();
        p++;
        if(semn==false)
            return val;
        else
            return fc(val);
    }
    if(s[p]>='A' && s[p]<='Z')
    {
        val=vec[s[p]-'A'];
        p++;
        if(semn==false)
            return val;
        else
            return fc(val);
    }
}
int main()
{
    FILE *in,*out;
    in=fopen("bool.in","r");
    out=fopen("bool.out","w");
    int n,i,nr1=0;
    char c;
    bool ras;
    fgets(s1,1000,in);
    fscanf(in,"%d",&n);
    c=fgetc(in);
    fgets(v,100,in);
    for(i=0;i<=1000;i++)
    {
        if(s1[i]!=' ')
        {
            s[nr1]=s1[i];
            nr1++;
        }
    }
    for(i=0;i<n;i++)
    {
        vec[v[i]-'A']=fc(vec[v[i]-'A']);
        ras=exp();
        fprintf(out,"%d",ras);
        p=0;
    }
    return 0;
}