Pagini recente » Cod sursa (job #1342265) | Cod sursa (job #2925452) | Cod sursa (job #2089187) | Cod sursa (job #2642873) | Cod sursa (job #300271)
Cod sursa(job #300271)
#include<fstream.h>
#include<string.h>
#define AND 3
#define OR 2
#define NOT 4
#define TRUE 1
#define FALSE 0
char a1[1010],a2[1010],a3[1010],val[100],s[105];
int n2,n3,m;
int op[1000];
int main()
{
ifstream f("bool.in"); ofstream g("bool.out");
int i,pr,t=0,n,j;
char item[10];
val['Z'+2]=1;
f.get(a1,1000);
f>>m;
f>>s;
n2=-1;n3=-1;
for(i=0;a1[i];i++)
{
if(a1[i]=='(') a2[++n2]=a1[i];
if(a1[i]==')')
{
while (a2[n2]!='(')
a3[++n3]=a2[n2--];
n2--;
}
if(a1[i]>='A'&&a1[i]<='Z')
{
while(a1[i]>='A'&&a1[i]<='Z')
item[t++]=a1[i++];
item[t]=0; i--;
if(t==1) a3[++n3]=item[0];
else
if(strcmp(item,"TRUE")==0||strcmp(item,"FALSE")==0)
{
if(strcmp(item,"TRUE")==0) a3[++n3]='Z'+2;
if(strcmp(item,"FALSE")) a3[++n3]='Z'+1;
}
else
{
if(strcmp(item,"AND")==0) pr=AND;
if(strcmp(item,"OR")==0) pr=OR;
if(strcmp(item,"NOT")==0) pr=NOT;
while(a2[n2]>=pr&&n2>=0&&a2[n2]!='(')
{
a3[++n3]=a2[n2--];
}
a2[++n2]=pr;
}
t=0;
}
}
while(n2>=0)
a3[++n3]=a2[n2--];
n=-1;
for(j=0;j<m;j++)
{
n=-1;
if(val[s[j]]==0) val[s[j]]=1;
else val[s[j]]=0;
for(i=0;i<=n3;i++)
{
if(a3[i]>='A'&&a3[i]<='Z'+2)
op[++n]=val[a3[i]];
if(a3[i]==AND)
{
if(op[n]&&op[n-1]) op[n--]=1;
else op[n--]=0;
}
if(a3[i]==OR)
{
if(op[n]||op[n-1]) op[--n]=1;
else op[--n]=0;
}
if(a3[i]==NOT)
{
if(op[n]==1) op[n]=0;
else op[n]=1;
}
}
g<<op[0];
}
f.close();
g.close();
return 0;
}