Pagini recente » Cod sursa (job #1912864) | Cod sursa (job #2823744) | Cod sursa (job #1583846) | Cod sursa (job #2683352) | Cod sursa (job #84433)
Cod sursa(job #84433)
#include<stdio.h>
#include <fstream>
int v[1005],m=0;
int vec[35];
int alpha(char x)
{
return ('A'<=x&&x<='Z');
}
int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}
int andd(int x,int y)
{
if(x&&y) return 1;
return 0;
}
int nott(int x)
{
if(x) return 0;
return 1;
}
int eval(int li,int lf)
{
if(li==lf)
if(v[li]==27) return 0;
else
if(v[li]==28) return 1;
else return vec[v[li]];
int desc,min,poz,i;
min=100;
desc=0;
for(i=li;i<=lf;i++)
{
if(v[i]==33) desc++;
else
if(v[i]==34) desc--;
else
if(desc==0&&v[i]>=30&&v[i]<=32&&v[i]<=min)
{
min=v[i];
poz=i;
}
}
if(min==100)
return eval(li+1,lf-1);
if(min==30)
return orr(eval(li,poz-1),eval(poz+1,lf));
if(min==31)
return andd(eval(li,poz-1),eval(poz+1,lf));
return nott(eval(poz+1,lf));
}
int main()
{
FILE *fin=fopen("bool.in","r"),*fout=fopen("bool.out","w");
int n=0,i,aux,s[1005];
char s1[1005];
char ch;
/*ch=fgetc(fin);
while(ch!='\n')
{
s[++n]=ch;
ch=fgetc(fin);
}*/
fgets (s1, 1200, fin);
n = strlen (s1);
for (i = 0; i<=n; ++i)
s[i+1] = s1[i];
for(i=1;i<=n;i++)
if(s[i]!=' ')
{
if(s[i]=='(')
v[++m]=33;
else
if(s[i]==')')
v[++m]=34;
else
{
if(alpha(s[i]))
if(alpha(s[i+1]))
{
if(s[i]=='N')
v[++m]=32,i+=2;
else
if(s[i]=='O')
v[++m]=30,i++;
else
if(s[i]=='A')
v[++m]=31,i+=2;
else
if(s[i]=='T')
v[++m]=28,i+=3;
else
if(s[i]=='F')
v[++m]=27,i+=4;
}
else
v[++m]=s[i]-'A'+1;
}
}
for(ch='A';ch<='Z';ch++)
vec[ch-'A'+1]=0;
fscanf(fin,"%d",&n);
ch=fgetc(fin);
for(i=1;i<=n;i++)
{
ch=fgetc(fin);
aux=ch-'A'+1;
if(vec[aux])
vec[aux]=0;
else vec[aux]=1;
fprintf(fout,"%d",eval(1,m));
}
fprintf(fout,"\n");
//fcloseall();
return 0;
}