Pagini recente » Cod sursa (job #3199458) | Cod sursa (job #2576139) | Cod sursa (job #2971716) | Cod sursa (job #2346284) | Cod sursa (job #1170622)
#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];
}