Cod sursa(job #1823635)

Utilizator darkviper17Dark Viper darkviper17 Data 6 decembrie 2016 17:51:29
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int N=10001;
char sir[N];
char sir2[N];
void simplificare();
bool expresie();
int termen();
int factor();
int k=0, p=0, len, j;
bool v[N];
char schimb;
void simplificare()
{

    if(sir[p]==0)
    {
        return;
    }
    for(p=0; p<len; p++)
    {

        if(sir[p]=='A' && sir[p+1]=='N' && sir[p+2]=='D')
        {
            sir2[k]='&';
            p+=2;
            k++;
        }

        else if(sir[p]=='O' && sir[p+1]=='R')
        {
            sir2[k]='|';
            p+=1;
            k++;
        }

        else if(sir[p]=='N' && sir[p+1]=='O' && sir[p+2]=='T')
        {
            sir2[k]='!';
            p+=2;
            k++;
        }

        else if(sir[p]=='T' && sir[p+1]=='R' && sir[p+2]=='U' && sir[p+3]=='E')
        {
            sir2[k]='1';
            p+=3;
            k++;
        }

        else if(sir[p]=='F' && sir[p+1]=='A' && sir[p+2]=='L' && sir[p+3]=='S' && sir[p+4]=='E')
        {
            sir2[k]='0';
            p+=4;
            k++;
        }
        else if(sir[p]!=' ')
        {
            sir2[k]=sir[p];
            k++;
        }
    }
}
bool expresie()
{
    bool rez=factor();
    while(sir2[j]=='&' || sir2[j]=='|' || sir2[j]=='!')
    {
        if(sir2[j]=='&')
        {
            j++;
            rez=(rez && factor());
        }

        else if(sir2[j]=='|')
        {
            j++;
            rez=(rez || factor());
        }

        else if(sir2[j]=='!')
        {
            j++;
            rez=!rez;
        }
    }
    return rez;
}
    int factor()
    {
        bool rez;
        if(sir2[j]=='(')
        {
            p++;
            rez=expresie();
            p++;
            return rez;
            }
        if(isdigit(sir2[j]))
        {
            rez=(bool)(sir2[j]-'0');
        }
        else if(sir2[j]==schimb){
             v[sir2[j]]=!v[sir2[j]];
             rez=v[sir2[j]];
        }
       else {rez=v[sir2[j]];}
       return rez;
    }


int main()
{
    int n;
    fin.getline(sir,100001);
    fin>>n;
    len=strlen(sir);
    simplificare();
    for(int i=0; i<n; i++)
    {
       fin>>schimb;
       fout<<expresie();
    }
    return 0;
}