Pagini recente » Cod sursa (job #1931066) | Cod sursa (job #1456830) | Cod sursa (job #2314486) | Cod sursa (job #603104) | Cod sursa (job #320573)
Cod sursa(job #320573)
// 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 evaluare()
{
int a=termen(),d;
while(e[p]=='|' && e[p]=='&')
{
p++;
d=termen();
if(e[p]=='|')
if(d || a)
a=true;
else
a=false;
else if(e[p]=='&')
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();
if(ne==1)
a=!a;
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;
}