Cod sursa(job #1729411)

Utilizator otnielMercea Otniel otniel Data 14 iulie 2016 17:47:53
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 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;
    int vr=-1;
    if(expr[i]=='(')
    {
        i++;
        f=evalexpr();
        i++;
        while(expr[i]==' '&&i<lung)
        i++;
    }
    else
        if(expr[i]=='N'&&expr[i+1]=='O'&&expr[i+2]=='T')
        {
            i=i+4;
            f=!evalfact();
        }
        else
        {
            if(expr[i]=='T'&&expr[i+1]=='R'&&expr[i+2]=='U'&&expr[i+3]=='E')
                {
                    vr=0;
                    i=i+3;
                }
            if(expr[i]=='F'&&expr[i+1]=='A'&&expr[i+2]=='L'&&expr[i+3]=='S'&&expr[i+4]=='E')
            {
            vr=1;
            i=i+4;
            }
        f=eval();
        i++;
        while(expr[i]==' '&&i<lung)
            {
                i++;
            }
        }
        if(vr==0)
        return true;
        else
        if(vr==1)
        return false;
        else
    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=evalfact()&&f;
    }
return f;
}

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

    while(i<lung&&expr[i]=='O'&&expr[i+1]=='R')
    {
        i=i+3;
        f=evalterm()||f;
    }
    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();
    }
}