Pagini recente » Cod sursa (job #2299912) | Cod sursa (job #597635) | Cod sursa (job #2828225) | Cod sursa (job #561900) | Cod sursa (job #160801)
Cod sursa(job #160801)
#include<stdio.h>
#include<string.h>
#define nm 1005
char s[nm],var[102];
int val[256],n,c;
int rezolva();
void citire();
int main()
{int i;
citire();
freopen("bool.out","w",stdout);
for(i=1;i<=n;i++)
{val[var[i-1]]=!val[var[i-1]];
c=0;
printf("%d",rezolva());
}
fclose(stdout);
return 0;
}
void citire()
{freopen("bool.in","r",stdin);
fgets(s,nm,stdin);
//fgets(s,nm,stdin);
scanf("%d",&n);
fgets(var,100,stdin);
fgets(var,100,stdin);
}
int rezolva()
{int op[100],i,x[100],adr[100],op1[100];
x[0]=0;op[0]=0;op1[0]=0;
for(;c<strlen(s);)
if(s[c]==' ')
c++;
else if(s[c]=='(')
{c++;x[++x[0]]=rezolva();}
else if(s[c]==')')
{c++;break;}
else if(s[c]=='T'&&s[c+1]=='R'&&s[c+2]=='U'&&s[c+3]=='E')
{x[++x[0]]=1;c+=4;}
else if(s[c]=='F'&&s[c+1]=='A'&&s[c+2]=='L'&&s[c+3]=='S'&&s[c+4]=='E')
{x[++x[0]]=0; c+=5;}
else if(s[c]=='O'&&s[c+1]=='R')
{op[++op[0]]=2;c+=2;
adr[op[0]]=x[0];}
else if(s[c]=='A'&&s[c+1]=='N'&&s[c+2]=='D')
{op[++op[0]]=1;c+=3;adr[op[0]]=x[0];}
else if(s[c]=='N'&&s[c+1]=='O'&&s[c+2]=='T')
{op[++op[0]]=0;c+=3;adr[op[0]]=x[0];}
else x[++x[0]]=val[s[c++]];
for(i=1;i<=op[0];i++)
if(op[i]==0)
x[adr[i]+1]=!x[adr[i]+1];
else
op1[++op1[0]]=op[i];
op[0]=0;
int n=1;
for(i=1;i<x[0];i++)
if(op1[i]==1)
x[n]=x[n]&&x[i+1];
else
x[++n]=x[i+1];
for(i=2;i<=n;i++)
x[1]=x[1]||x[i];
return x[1];
}