Pagini recente » Cod sursa (job #2565475) | Cod sursa (job #2551864) | Cod sursa (job #2556124) | Cod sursa (job #3242918) | Cod sursa (job #1994374)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1002],v[1002];
int n,cnt;
int val[103];
void normalizare()
{
for (int i=0;s[i];i++)
{
if (s[i]==' ')continue;
if (s[i]=='O' && s[i+1]=='R')
{
v[cnt++]='|';
i++;
continue;
}
if (s[i]=='A' && s[i+1]=='N')
{
v[cnt++]='&';
i+=2;
continue;
}
if (s[i]=='N' && s[i+1]=='O')
{
v[cnt++]='1';
v[cnt++]='!';
i+=2;
continue;
}
if (s[i]=='T' && s[i+1]=='R')
{
v[cnt++]='1';
i+=3;
continue;
}
if (s[i]=='F' && s[i+1]=='A')
{
v[cnt++]='0';
i+=4;
continue;
}
if (s[i]=='(' || s[i]==')')
{
v[cnt++]=s[i];
continue;
}
v[cnt++]=s[i];
}
}
//aici incepe cancerul
int OR(),AND(),XOR(),finalizare();
int i;
int OR()
{
int r=AND();
while (v[i]=='|')
{
i++;
r=(r | AND());
}
return r;
}
int AND()
{
int r=XOR();
while (v[i]=='&')
{
i++;
r=(r & XOR());
}
return r;
}
int XOR()
{
int r=finalizare();
while (v[i]=='!')
{
i++;
r=(r ^ finalizare());
}
return r;
}
int finalizare()
{
int r=0;
if (v[i]=='(')
{
i++;
r=OR();
i++;
} else {
if (v[i]=='1')
{
i++;
return 1;
}
else if (v[i]=='0')
{
i++;
return 0;
}
return val[v[i++]];
}
return r;
}
int main()
{
fin.getline(s,1001);
normalizare();
fin >> n;
for (int j=1;j<=n;j++)
{
char x;
fin >> x;
val[x]=1-val[x];
i=0;
fout << OR();
}
return 0;
}