Cod sursa(job #1741549)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 14 august 2016 12:35:32
Problema Bool Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int t[256],val,i,n,j,l;
char s[1001],modif[101];
int evalExp();
int evalTerm();
int evalFact();
int eval(){
   int val;
   if (s[i]==' ') i++;
   if ('A'<=s[i] && s[i]<='Z' && (s[i+1]=='(' || s[i+1]==')' || s[i+1]==' ')){
       val=t[(int)s[i]];
       i=i+1;
       //fout<<val<<'\n';
       return val;
   }
   if (i==l-1 && 'A'<=s[i] && s[i]<='Z' && s[i-1]==' ') {
       return t[(int)s[i]];
        i++;
   }
   if (l==1 && 'A'<=s[0] && s[0]<='Z'){
       i++;
       return t[(int)s[0]];
   }
   if (s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E') {
        i=i+4;
        return 1;
   }
   if (s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E') {
        i=i+5;
        return 0;
   }

}
int evalFact(){
    int val;
    if (s[i]==' ') i++;
    if (s[i]=='('){
            i++;
            val=evalExp();
            i++;
        }
          else
          if (i+4<l && s[i]=='N' && s[i+1]=='O' && s[i+2]=='T' && s[i+3]==' '){
                     i=i+4;
                     val=evalExp();
                     if (val==0) val=1;
                        else
                            val=0;
          }
          else{
            val=eval();
          }
     return val;
}
int evalTerm(){
   int val=evalFact(),vali;
   if (s[i]==' ') i++;
   while(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D' && i+3<l){
        i=i+3;
        vali=evalFact();
        if (val==1 && vali==1) val=1;
          else
            val=0;
   }
   return val;
}
int evalExp(){
   int val=evalTerm(),vali;
    while(s[i]=='O' && s[i+1]=='R' && i+2<l){
           i=i+2;
           vali=evalTerm();
           if (vali==1 || val==1) val=1;
              else
                val=0;
   }
   return val;
}
int main(){
    fin.get(s,1001,'\n');
    l=strlen(s);
    fin.get();
    fin>>n;
    fin.get();
    fin.get(modif,101,'\n');
    fin.close();
    for (j=1;j<=n;j++){
        i=0;
        if (t[(int)modif[j-1]]==0) t[(int)modif[j-1]]=1;
            else
              t[(int)modif[j-1]]=0;
        val=evalExp();
        fout<<val;
    }
    fout.close();
    return 0;
}