Cod sursa(job #1315283)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 12 ianuarie 2015 18:20:51
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <cstdio>
#include <cstring>
#include <fstream>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char t[1005],s[1005],chr;
int c[30],i,n;


int expresie();
int termen();
int operat();



int operat()
{
    if (s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D') {
                    i+=4;
                    return 1;
    }
    else {
        i+=3;
        return 0;
    }

}


int expresie()
{   if (s[i]==' ') i++;
    int r,t;

    if (s[i]=='(') {
        i++;
        r=expresie();
        }
        else r=termen(),t;
    i++;
    while (i<strlen(s)&&s[i]!=')') {

            if (operat()==1) {
                     t=termen();
                     if (r==1&&t==1) r=1;
                                else r=0;
            }   else {
                     t=termen();
                     if (r==0&&t==0) r=0;
                                else r=1;
            }
    }
    i++;
    return r;

}
int termen()
{
   if (s[i]=='(') {
        i++;
        return expresie();
        }
    if (s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T') {
        i+=4;
        return 1-termen();
    }
    if (s[i]=='0') {
            i++;
            return 0;
    }
    if (s[i]=='1') {
            i++;
            return 1;
    }
    if (s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U') {
            i+=4;
            return 1;
    }
    if (s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L') {
            i+=5;
            return 0;
    }





}



void change (int i)
{
    if (i-1>=0&&s[i-1]>='A'&&s[i-1]<='Z') return ;
    if (i+1<strlen(s)&&s[i+1]>='A'&&s[i+1]<='Z') return ;
    if (s[i]<'A') return;
    if (s[i]>'Z') return;

    s[i]=c[t[i]-'A']+'0';

}



int main()
{
    int j;
    f.getline(t,1005);
    for (i=0;i<strlen(t);i++) {

    }
    f>>n;f.get();
    while (n!=0) {

        f.get(chr);
        c[chr-'A']=1-c[chr-'A'];

        memset(s,0,sizeof(s));
        memcpy(s,t,sizeof(s));
        for (i=0;i<strlen(s);i++)
                change(i);
        i=0;
        g<<expresie();
        n--;
    }

    return 0;
}