Pagini recente » Cod sursa (job #2664893) | Cod sursa (job #1436231) | Cod sursa (job #2690294) | Cod sursa (job #2142895) | Cod sursa (job #1838402)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
//de la 1 la 26 codurile literelor
//-1 and
//-2 or
//-3 not
//-10 (
//-11 )
char s[1005],c;
int l,i,t[1005],v,n,raspuns,j,term,op[1005];
bool val[30],sa[1005],ok[1005];
void calcul(int k)
{
int no=0;
ok[k]=1;
while(j<=v)
{
if(t[j]==-3) {no=no^1;++j;}
if(t[j]>=0)
{
if(no) {term=!val[t[j]];no=0;}
else term=val[t[j]];
if(ok[k]) {sa[k]=t[j];++j;ok[k]=0;continue;}
else
{
++j;
if(op[k]==-1) sa[k]=sa[k]&term;
else if(op[k]==2) sa[k]=sa[k]|term;
}
}
if(t[j]==-10) {++j;calcul(k+1);}
if(t[j]==-11)
{
++j;
if(op[k-1]==-1) sa[k-1]=sa[k-1]&sa[k];
else sa[k-1]=sa[k-1]|sa[k];
break;
}
++j;
}
}
int main()
{
f.getline(s+1,1005);
l=strlen(s+1);
i=1;
while(i<=l)
{
if(s[i]==' ') ++i;
if(isalpha(s[i])&&!isalpha(s[i+1])) {t[++v]=s[i]-'A'+1;++i;continue;}
if(s[i]=='T'&&s[i+1]=='R') {t[++v]=27;i=i+4;continue;}
if(s[i]=='F'&&s[i+1]=='A') {t[++v]=28;i=i+5;continue;}
if(s[i]=='A'&&s[i+1]=='N') {t[++v]=-1;i=i+3;continue;}
if(s[i]=='O'&&s[i+1]=='R') {t[++v]=-2;i=i+2;continue;}
if(s[i]=='N'&&s[i+1]=='O') {t[++v]=-3;i=i+3;continue;}
if(s[i]=='(') {t[++v]=-10;++i;continue;}
if(s[i]==')') {t[++v]=-11;++i;continue;}
}
f>>n;
f.get();
for(i=1;i<=n;++i)
{
f>>c;
val[c-'A'+1]=1-val[c-'A'+1];
j=1;
calcul(1);
g<<sa[1];
}
return 0;
}