Cod sursa(job #2842184)

Utilizator oana75Ioana Prunaru oana75 Data 31 ianuarie 2022 11:47:56
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");

char s[1001];
int p;
bool valoare[27];


bool expresie();
bool termen();
bool factor();

bool expresie()
{
    bool sau;
    sau=termen();
    while(s[p]=='|')
    {
        p++;
        sau=(termen()||sau);
    }
    return sau;
}

bool termen()
{
    bool shi;
    shi=factor();
    while(s[p]=='&')
    {
        p++;
        shi=(factor()&&shi);
    }
    return shi;
}

bool factor()
{
    bool val,semn=true;
    while(s[p]=='!')
    {
        p++;
        semn=(!semn);
    }
    if(s[p]=='(')
    {
        p++;
        val=expresie();
        p++;
        if(semn==false)
            return !val;
        return val;

    }
    return valoare[s[p]-'A'];
}
int main()
{
    f.getline(s,1001);
    int i,n,k;
    char c;
    n=strlen(s)-1;
    for(i=0;i<=n;i++)
        if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
    {
        s[i]='&';
        strcpy(s+i+1,s+i+3);
    }
    else
        if(s[i]=='O'&&s[i+1]=='R')
    {
        s[i]='|';
        strcpy(s+i+1,s+i+2);
    }
    else
        if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
    {
        s[i]='!';
        strcpy(s+i+1,s+i+3);
    }
    f>>k;
    for(i=1;i<=k;i++)
    {
        f>>c;
        valoare[c-'A']=(!valoare[c-'A']);
        g<<expresie();
    }

    return 0;
}