Cod sursa(job #1310030)

Utilizator robx12lnLinca Robert robx12ln Data 6 ianuarie 2015 12:42:24
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i;
char s[1010];
char v[1010];
char c[1010];

int exp1();
int exp2();
int exp3();

int exp1(){
    int r=0;
    r=exp2();
    while(v[i]=='|'){
        i++;
        r|=exp2();
    }
    return r;
}
int exp2(){
    int r=0;
    r=exp3();
    while(v[i]=='&'){
        i++;
        r&=exp3();
    }
    return r;
}
int exp3(){
    int r=0;
    if(v[i]=='('){
        i++;
        r=exp1();
        i++;
    }else{
        if(v[i]>='A' && v[i]<='Z'){
            r = c[v[i]-'A'];
            i++;
        }
        if(v[i]=='!'){
            i++;
            r = (exp1());
            if (r)
                r = 0;
            else
                r = 1;
        } else
            if(v[i]=='1'){
                r=1;
                i++;
            } else
                if(v[i]=='0'){
                    r=0;
                    i++;
                }
    }
    return r;
}
int main(){

    fin.get(s,1010);
    int k=-1,n;
    for(i=0;i<strlen(s);){
        if(s[i]!=' '){
            if(s[i]=='A' && s[i+1]=='N'){
                v[++k]='&';
                i+=3;
            }
            if(s[i]=='T' && s[i+1]=='R'){
                v[++k]='1';
                i+=4;
            }
            if(s[i]=='N' && s[i+1]=='O'){
                v[++k]='!';
                i+=3;
            }
            if(s[i]=='F' && s[i+1]=='A'){
                v[++k]='0';
                i+=5;
            }
            if(s[i]=='O' && s[i+1]=='R'){
                v[++k]='|';
                i+=2;
            }
            if(s[i]>='A' && s[i]<='Z' || s[i]=='(' || s[i]==')'){
                v[++k]=s[i];
                i++;
            }
        } else
            i++;
    }
    fin>>n;
    fin>>s;
    for(int j=0;j<n;j++){
        i=0;
        c[s[j]-'A'] = (c[s[j]-'A'] + 1) % 2;
        fout<<exp1();
    }
    return 0;
}