Pagini recente » Cod sursa (job #1601751) | soldiers | Cod sursa (job #1709069) | Cod sursa (job #1993818) | Cod sursa (job #79766)
Cod sursa(job #79766)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
struct nod{
char r;
nod *s;
nod *d;
};
char expr1[1011],expr2[1011],*p,c;
int l,i,j,n,val[30];
nod *arb;
void constr(nod *aarb,char *pp);
int eval(nod *aarb);
int main()
{
FILE *f,*g;f=fopen("bool.in","r");g=fopen("bool.out","w");
fgets(expr2,1002,f);l=strlen(expr2);
while(i<l)
{if(expr2[i]==' ')i++;
else if(expr2[i]=='T'&&expr2[i+1]=='R'){expr1[j]='@';i=i+4;j++;}
else if(expr2[i]=='F'&&expr2[i+1]=='A'){expr1[j]='?';i=i+5;j++;}
else if(expr2[i]=='O'&&expr2[i+1]=='R'){expr1[j]='+';i=i+2;j++;}
else if(expr2[i]=='A'&&expr2[i+1]=='N'){expr1[j]='*';i=i+3;j++;}
else if(expr2[i]=='N'&&expr2[i+1]=='O'){expr1[j]='-';i=i+3;j++;}
else {expr1[j]=expr2[i];i++;j++;}
}
expr1[j-1]=0;
p=&expr1[0];
arb=new nod;
constr(arb,p);
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{ fscanf(f,"%c",&c);
j=(int)(c-'?');
val[j]=!val[j];
j=eval(arb);
fprintf(g,"%d",j);
}
fprintf(g,"\n");
fcloseall();
return 0;
}
void constr(nod *aarb,char *pp)
{
nod *ss,*dd;
char *ps,*pv,*orr;
long int niv;
ss=new nod;dd=new nod;
ps=pp;pv=pp;niv=0;orr=0;
while(*pv)
{
if(*pv=='(') niv++;
else
if(*pv==')') niv--;
else
if(!niv)
{ if(*pv=='*') {if(!orr) orr=pv;}
else
if(*pv=='+')
{ aarb->r='+';
*pv=0;pv++;
constr(ss,ps);aarb->s=ss;
constr(dd,pv);aarb->d=dd;
return;
}
}
pv++;
}
if(orr)
{ aarb->r='*';
*orr=0;orr++;
constr(ss,ps);aarb->s=ss;
constr(dd,orr);aarb->d=dd;
return;
}
if(*ps=='(')
{ pv--;*pv=0;
ps++;
constr(aarb,ps);
return;
}
if(*ps=='-')
{ aarb->r='-';
ps++;
constr(ss,ps);aarb->s=ss;
dd=0;aarb->d=dd;
return;
}
aarb->r=*ps;
ss=0;aarb->s=ss;
dd=0;aarb->d=dd;
return;
}
int eval(nod *aarb)
{
if(aarb->r>='?') return val[(int)(aarb->r-'?')];
if(aarb->r=='+') return eval(aarb->s)||eval(aarb->d);
if(aarb->r=='*') return eval(aarb->s)&&eval(aarb->d);
return !eval(aarb->s);
}