Pagini recente » Cod sursa (job #2612697) | Cod sursa (job #142603) | Cod sursa (job #2819449)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int DimMax=1000;
char s[DimMax+3], c, v[DimMax+3];
int nr=-1, i;
int n;
bool fr[100];
int expresieOr();
int expresieAnd();
int expresieNot();
int factor();
int expresieOr()
{
int r=expresieAnd();
while(v[i]=='|')
{
i++;
r=(r||expresieAnd());
}
return r;
}
int expresieAnd()
{
int r=expresieNot();
while(v[i]=='&')
{
i++;
r=(r&&expresieNot());
}
return r;
}
int expresieNot()
{
int r=factor();
while(v[i]=='^')
{
i++;
r=(r^factor());
}
return r;
}
int factor()
{
int r;
if(v[i]=='(')
{
i++;
r=expresieOr();
i++;
}
else
{
if(v[i]=='1')
{
i++;
return 1;
}
if(v[i]=='0')
{
i++;
return 0;
}
return fr[v[i++]];
}
return r;
}
int main()
{
fin.getline(s, DimMax+1);
for(i=0; s[i]; i++)
{
if(s[i]==' ')
continue;
if(s[i]=='A' && s[i+1]=='N')
{
v[++nr]='&';
i+=2;
continue;
}
if(s[i]=='O' && s[i+1]=='R')
{
v[++nr]='|';
i++;
continue;
}
if(s[i]=='N' && s[i+1]=='O')
{
v[++nr]='1';
v[++nr]='^';
i+=2;
continue;
}
if(s[i]=='T' && s[i+1]=='R')
{
v[++nr]='1';
i+=3;
continue;
}
if(s[i]=='F' && s[i+1]=='A')
{
v[++nr]='0';
i+=4;
continue;
}
if(s[i]=='(' || s[i]==')')
{
v[++nr]=s[i];
continue;
}
v[++nr]=s[i];
}
//fout<<v<<"\n";
fin>>n;
for(int j=1; j<=n; j++)
{
fin>>c;
fr[c]=!fr[c];
i=0;
fout<<expresieOr();
}
return 0;
}