Pagini recente » Cod sursa (job #1379434) | Cod sursa (job #1394413) | Cod sursa (job #630404) | Cod sursa (job #918930) | Cod sursa (job #320571)
Cod sursa(job #320571)
// bool.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
# include <string.h>
#define AND e[p]=='A' && e[p+1]=='N' && e[p+2]=='D'
# define OR e[p]=='O' && e[p+1]=='R'
#define TRUE e[p]=='T' && e[p+1]=='R' && e[p+2]=='U' && e[p+3]=='E'
#define FALSE e[p]=='F' && e[p+1]=='A' && e[p+2]=='L' && e[p+3]=='S' && e[p+4]=='E'
#define NOT e[p]=='N' && e[p+1]=='O' && e[p+2]=='T'
int va[200];
char e[1001],buna[1001];
int p=0;
int n,ra,c,st,cur=0;
int termen();
int evaluare2();
int evaluare()
{
int a=evaluare2(),d;
while(e[p]=='|')
{
p++;
d=evaluare2();
if(d || a)
a=true;
else
a=false;
}
return a;
}
int evaluare2()
{
int a=termen(),d;
while(e[p]=='&')
{
p++;
d=termen();
if(d && a)
a=true;
else
a=false;
}
return a;
}
int termen()
{
int a,ne=0;
if(e[p]=='1')
{
p++;
a=1;
return a;
}
if(e[p]=='0')
{
p++;
a=0;
return a;
}
while(e[p]=='!')
{
ne=!ne;
p++;
}
if(e[p]>=65 && e[p]<=90)
{
if(ne==0)
a=va[e[p]];
else
a=!va[e[p]];
p++;
}
else if(e[p]=='(')
{
p++;
a=evaluare();
p++;
}
return a;
}
void transformare()
{
int p=0;
while(e[p] && e[p]!='\n')
if(AND)
{
buna[cur++]='&';
p=p+3;
}
else if(OR)
{
buna[cur++]='|';
p=p+2;
}
else if(TRUE)
{
buna[cur++]='1';
p=p+4;
}
else if(FALSE)
{
buna[cur++]='0';
p=p+5;
}
else if(NOT)
{
buna[cur++]='!';
p=p+3;
}
else if(e[p]==' ')
p++;
else
buna[cur++]=e[p++];
memset(e,1000,0);
strcpy(e,buna);
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(e,1000,stdin);
scanf("%d\n",&n);
transformare();
p=0;
for(int i=1;i<=n;i++)
{
scanf("%c",&c);
va[c]=!va[c];
ra=evaluare();
printf("%d",ra);
p=0;
}
return 0;
}