Cod sursa(job #1729294)

Utilizator otnielMercea Otniel otniel Data 14 iulie 2016 15:51:58
Problema Bool Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
bool a[26];
char expr[1005];
int lung;
int n;
int i;
bool eval();
bool evalfact();
bool evalterm();
bool evalexpr();
bool eval()
{
    return a[expr[i]-65];
}
bool evalfact()
{
    bool f;
    if(expr[i]=='(')
    {
        i++;
        f=evalexpr();
        i=i+2;
    }
    else
        if(expr[i]=='N'&&expr[i+1]=='O'&&expr[i+2]=='T')
        {
            i=i+4;
            f=!eval();
        }
        else
        {
        if(!(a[i]=='O'&&a[i+1]=='R'||a[i]=='A'&&a[i+1]=='N'&&a[i+2]=='D'))
        {f=eval();
        i=i+2;
        }

        }
    return f;
}
bool evalterm()
{
    bool f=evalfact();

    while(i<lung&&expr[i]=='A'&&expr[i+1]=='N'&&expr[i+2]=='D')
    {
        i=i+4;
        f=f&&evalfact();
    }
return f;
}

bool evalexpr()
{
    bool f=evalterm();

    while(i<lung&&expr[i]=='O'&&expr[i+1]=='R')
    {
        i=i+3;
        f=f||evalterm();
    }
    return f;
}
int main()
{
    ifstream f("bool.in");
    ofstream g("bool.out");
    f.get(expr,1000);
    lung=strlen(expr);
    f>>n;
    for(int j=0;j<n;j++)
    {
        char c;
        f>>c;
        a[c-65]=!a[c-65];
        i=0;
        g<<evalexpr();

    }
}