Pagini recente » Cod sursa (job #3229089) | Cod sursa (job #2305284) | Cod sursa (job #1545471) | Cod sursa (job #395310) | Cod sursa (job #2527211)
#include <fstream>
#include <cstring>
#include <map>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int k,x;
char a[1001],b[1001];
map <char,bool> m;
bool expresie();
bool termen();
bool OR();
int main()
{ in.get(a,1005);
int l=strlen(a);
for(int i=0;i<l;i++)
{ if(a[i]==' ')
strcpy(a+i,a+i+1),l--;
if(a[i]>='a' && a[i]<='z')
a[i]+=('A'-'a');
}
for(int i=0;i<l;i++)
{ if(a[i]==' ')
strcpy(a+i,a+i+1),l--;
if(a[i]=='N' && a[i+1]=='O' && a[i+2]=='T')
a[i]='!',strcpy(a+i+1,a+i+3),l-=2;
if(a[i]=='O' && a[i+1]=='R')
a[i]='|',strcpy(a+i+1,a+i+2),l-=1;
if(a[i]=='A' && a[i+1]=='N' && a[i+2]=='D')
a[i]='&',strcpy(a+i+1,a+i+3),l-=2;
if(a[i]=='T' && a[i+1]=='R' && a[i+2]=='U' && a[i+3]=='E')
a[i]='1',strcpy(a+i+1,a+i+4),l-=3;
if(a[i]=='F' && a[i+1]=='A' && a[i+2]=='L' && a[i+3]=='S' && a[i+4]=='E')
a[i]='0',strcpy(a+i+1,a+i+5),l-=4;
}
for(int i=0;i<l;i++)
{ b[i]=a[i];
if('A'<=b[i] && b[i]<='Z')
m[b[i]]=0;
}
in>>k;
for(int i=1;i<=k;i++)
{ char c;
in>>c;
m[c]=!m[c];
for(int i=0;i<l;i++)
if('A'<=b[i] && b[i]<='Z')
a[i]=(char)(m[b[i]]+'0');
x=0;
out<<expresie();
}
in.close();
out.close();
return 0;
}
bool expresie()
{ bool r=termen();
while(a[x]=='&' || a[x]=='|')
{ x++;
if(a[x-1]=='&')
r=r&expresie();
else if(a[x-1]=='|')
r=r|OR();
}
return r;
}
bool OR()
{ bool r=termen();
while(a[x]=='&')
{ x++;
if(a[x-1]=='&')
r=r&expresie();
}
return r;
}
bool termen()
{ if(a[x]=='!')
{ x++;
return !termen();
}
bool k=0;
if(a[x]=='(')
{ x++;
k=expresie();
x++;
}
else
k=a[x]-'0',x++;
return k;
}