Cod sursa(job #1309947)

Utilizator robx12lnLinca Robert robx12ln Data 6 ianuarie 2015 10:49:52
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 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']-'0';
            i++;
        }
        if(v[i]=='!'){
            r= !(r);
            i++;
        }
        if(v[i]=='1'){
            r=1;
            i++;
        }
        if(v[i]=='0'){
            r=0;
            i++;
        }
    }
    return r;
}
int main(){
    fin.get(s,1010);
    int k=0,n;
    for(i=0;i<strlen(s);i++){
        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];
            }
        }
    }
    fin>>n;
    fin>>s;
    for(int j=0;j<n;j++){
        i=0;
        c[s[i]-'A']=1;
        fout<<exp1();
    }
    return 0;
}