Pagini recente » Cod sursa (job #1719509) | Cod sursa (job #1173548) | Cod sursa (job #2734331) | Cod sursa (job #2203757) | Cod sursa (job #911636)
Cod sursa(job #911636)
#include<fstream>
#define DIM 1010
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int t,i,n,v[DIM];
char s[DIM],S[DIM],*p,c;
int exp(); int orr(); int an(); int no(); void cod();
int main ()
{
f.get(s,1001);
t=-1;
cod();
v['1']=1;
f>>n;
for(i=1;i<=n;++i)
{
p=S;
f>>c;
v[c]=!v[c];
g<<exp();
}
}
int exp()
{
int r=orr();
while(*p=='|')
{
++p;
r=r|orr();
}
return r;
}
int orr()
{
int r=an();
while(*p=='&')
{
++p;
r=r&an();
}
return r;
}
int an()
{
int r=no();
while(*p=='^')
{
++p;
r=r^no();
}
return r;
}
int no()
{
int r=0;
if(*p=='(')
{
++p;
r=exp();
}
else
if(*p=='1'||*p=='0'||(*p<='Z'&&*p>='A'))
{
r=v[*p];
}
++p;
return r;
}
void cod()
{
for(i=0;s[i];++i)
{
if(s[i]==' ')
continue;
if(s[i]=='(')
S[++t]=s[i];
else
if((s[i]<='Z'&&s[i]>='A')&&(s[i+1]>'Z'||s[i+1]<'A'))
S[++t]=s[i];
else
if(s[i]==')')
S[++t]=s[i];
else
if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
{
S[++t]='1';
i+=3;
}
else
if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
{
S[++t]='0';
i+=4;
}
else
if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
S[++t]='1';
S[++t]='^';
i+=2;
}
else
if(s[i]=='O'&&s[i+1]=='R')
{
S[++t]='|';
i++;
}
else
if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
S[++t]='&';
i+=2;
}
}
}