Cod sursa(job #2305589)

Utilizator driver71528@gmail.comTerec Andrei-Sorin [email protected] Data 20 decembrie 2018 17:06:53
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cassert>
#define OR 'o'
#define AND 'a'
#define NOT 'n'
#define TRUE 't'
#define FALSE 'f'
using namespace std;

bool var[27];
char s[1003],*p;
char op[]={OR,AND};
int k,n;
char rez[101];

void creare(char s[],char S[])
{
    int i=0;
    while(S[i])
    {
        if(S[i]==' ')
        {
            i++;continue;
        }
        if(strchr("()",S[i]))
            s[k++]=S[i++];
        else
            if(isalpha(S[i+1]))
                switch(S[i])
                {
                    case 'A':s[k++]=AND,i+=3;break;
                    case 'O':s[k++]=OR,i+=2;break;
                    case 'N':s[k++]=NOT,i+=3;break;
                    case 'T':s[k++]=TRUE,i+=4;break;
                    case 'F':s[k++]=FALSE,i+=5;
                }
            else
                s[k++]=S[i++];
    }
    s[k]=NULL;
}
bool si();
bool negare();


bool expr()
{
    bool r=si();
    while(*p==OR)
    {
        p++;
        bool s=si();
        r= r || s;
    }
    return r;
}
bool si()
{
    bool r=negare();
    while(*p==AND)
    {
        p++;
        r=(negare() && r);
    }
    return r;
}
bool negare()
{
    bool r;
    if(*p=='(')
        p++,r=expr(),p++;
    else
        if(*p==NOT)
            p++,r=!negare();
        else
            if(*p==TRUE || *p==FALSE)
                r=(*p==TRUE),p++;
            else
                r=var[*p-'A'],p++;
    return r;
}

int main()
{
    char S[1003];
    ifstream f("bool.in");
    ofstream g("bool.out");
    f.getline(S,1002);
    creare(s,S);
    f>>n>>rez;
    f.close();
    for(int i=0;i<n;i++)
    {
        var[rez[i]-'A']=!var[rez[i]-'A'];
        p=s;
        g<<expr();
    }
    g.close();
    return 0;
}