Cod sursa(job #2523606)

Utilizator marinaoprOprea Marina marinaopr Data 14 ianuarie 2020 14:47:54
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <string.h>

using namespace std;

FILE *fin = fopen("bool.in", "r");
FILE *fout = fopen("bool.out", "w");

int n,lg,i;
char sir[1005],c,*p;
bool var[30];

bool expresie();
bool prioritate1();
bool prioritate2();
bool prioritate3();

bool prioritate3()
{
    bool ans;

    if(*p == '(')
    {
        ++p;
        ans = expresie();
        ++p;
    }
    else
    {
        ans = var[*p-'A'];
        ++p;
    }

    return ans;
}

bool prioritate2()
{
    bool ans;
    if(*p == 'N' and *(p+1) == 'O')
    {
        p += 3;
        ans = !prioritate3();
    }

    else
        ans = prioritate3();

    return ans;
}

bool prioritate1()
{
    bool ans = prioritate2();

    while(*p == 'A' and *(p+1) == 'N')
    {
        p += 3;
        ans &= prioritate2();
    }

    return ans;
}

bool expresie()
{
    bool ans = prioritate1();

    while(*p == 'O' and *(p+1) == 'R')
    {
        p += 2;
        ans |= prioritate1();
    }

    return ans;
}

int main()
{
    fgets(sir, 1002, fin);

    lg = strlen(sir)-1;
    for(i=0; i<lg; ++i)
        if(sir[i] == ' ')
            strcpy(sir+i, sir+i+1);

    fscanf(fin, "%d\n", &n);
    while(n--)
    {
        c = fgetc(fin);
        var[c-'A'] = !var[c-'A'];
        p = sir;
        fprintf(fout, "%d", expresie());
    }

    fclose(fin);
    fclose(fout);
    return 0;
}