Pagini recente » Cod sursa (job #678222) | Cod sursa (job #1728439) | Cod sursa (job #580536) | Autentificare | Cod sursa (job #305448)
Cod sursa(job #305448)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define Nmax 2024
char s[Nmax],o[Nmax];
int n;
int p;
int val[27];
void poloneza()
{
int i,j;
int n=strlen(s);
char st[Nmax];
int vf=0; p=-1;
for(i=0;i<n;++i)
{
if(s[i]=='(') st[++vf] = '(';
else if(s[i]==')')
{
while(vf && st[vf]!='(')
o[++p] = st[vf--];
vf--;
while(st[vf]=='!') o[++p] = st[vf--];
}
else if(s[i]=='O' && i+1<n && s[i+1] == 'R') //OR
{
while(st[vf] == '|' || st[vf] =='&' && vf) o[++p] = st[vf--];
st[++vf] = '|';
i=i+1;
}
else if(s[i]=='A' && i+2<n && s[i+1]=='N' && s[i+2]=='D')
{
while(st[vf] == '&' && vf) o[++p] = st[vf--];
st[++vf] = '&';
i=i+2;
}
else if(s[i] == 'N' && i+2<n && s[i+1]=='O' && s[i+2]=='T')
{
i=i+2;
st[++vf] = '!';
}
else if(s[i]=='T' && i+3<n && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
o[++p] = 't';
i=i+3;
}
else if(s[i]=='F' && i+4<n && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
o[++p] = 'f';
i=i+4;
}
else if(isalpha(s[i]))
{
o[++p] = s[i];
if(st[vf]=='!') o[++p] = st[vf--];
}
}
while(vf) o[++p] = st[vf--];
}
int eval()
{
int st[Nmax];
int vf=0,i;
for(i=0;i<=p;++i)
{
if(isalpha(o[i]))
{
if(o[i] == 't') st[++vf]=1;
else if(o[i]=='f') st[++vf] = 0;
else st[++vf] = val[o[i] - 65];
}
else if(o[i]=='!') st[vf] = !st[vf];
else if(o[i]=='|') { st[vf-1] = st[vf-1]|st[vf]; --vf; }
else if(o[i]=='&') { st[vf-1] = st[vf-1]&st[vf]; --vf; }
}
return st[1];
}
int main()
{
FILE*f=fopen("bool.in","r");
FILE*g=fopen("bool.out","w");
int i=0,sol;
char x;
fgets(s,Nmax,f);
poloneza();
fscanf(f,"%d\n",&n);
for(i=1;i<=n;++i)
{
fscanf(f,"%c",&x);
val[x-65] = !val[x-65];
sol=eval();
fprintf(g,"%d",sol);
}
return 0;
}