Pagini recente » Cod sursa (job #295551) | Cod sursa (job #1569944) | Cod sursa (job #1847856) | Cod sursa (job #2268543) | Cod sursa (job #161700)
Cod sursa(job #161700)
#include<fstream.h>
#include<string.h>
int a[30], v[1002], o[1002], k, l, n, m, i;
char c[1002], x[10], s;
ifstream f("bool.in");
ofstream g("bool.out");
void solve();
void det();
void calc();
int main()
{ int q;
char w;
f.getline(c, 1001, '\n');
f>>n; f.get();
for(q=0; q<n; q++)
{ f.get(w);
a[w-'A']=!a[w-'A'];
solve();
}
g<<'\n';
g.close();
return 0;
}
void solve()
{ m=strlen(c);
k=0; l=0;
for(i=0; i<m;)
{ det();
switch(s)
{ case 1:
l++; o[l]=1; break;
case 2:
while(o[l]!=1 && l>0)
{ calc(); l--;
}
l--; break;
case 3:
while(o[l]==3 && l>0)
{ calc(); l--;
}
l++; o[l]=3; break;
case 4:
while((o[l]==3 || o[l]==4) && l>0)
{ calc(); l--;
}
l++; o[l]=4; break;
case 5:
while(o[l]!=1 && l>0)
{ calc(); l--;
}
l++; o[l]=5; break;
case 6:
k++; v[k]=1; break;
case 7:
k++; v[k]=0; break;
default :
k++; v[k]=a[s-'A']; break;
}
}
while(l>0 && k>0)
{ calc(); l--;
}
g<<v[1];
}
void calc()
{ if(k==1)
{ if(l>0 && o[l]==3)
{ v[k]=!v[k];
}
return;
}
switch(o[l])
{ case 3:
v[k]=!v[k]; break;
case 4:
v[k-1]=v[k] && v[k-1]; k--; break;
case 5:
v[k-1]=v[k] || v[k-1]; k--; break;
}
}
void det()
{ int j=0;
char x[10];
if(c[i]=='(' || c[i]==')')
{ x[j]=c[i]; j++; i++;
}
else
while(c[i]!=' ' && c[i]!='(' && c[i]!=')' && i<m)
{ x[j]=c[i]; i++; j++;
}
x[j]='\0';
if(strcmp(x, "(")==0)
{ s=1;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, ")")==0)
{ s=2;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, "NOT")==0)
{ s=3;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, "AND")==0)
{ s=4;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, "OR")==0)
{ s=5;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, "TRUE")==0)
{ s=6;
if(c[i]==' ')
i++;
return;
}
if(strcmp(x, "FALSE")==0)
{ s=7;
if(c[i]==' ')
i++;
return;
}
s=c[i-1];
if(c[i]==' ')
i++;
}