Pagini recente » Cod sursa (job #264514) | Cod sursa (job #2104058) | Cod sursa (job #1802394) | Cod sursa (job #465878) | Cod sursa (job #837792)
Cod sursa(job #837792)
#include<fstream>
#define NMAX 5000
using namespace std;
ifstream f("bool.in"); ofstream g("bool.out");
int n;
bool b['Z' - 'A' + 1];
char s[NMAX], *p, c;
bool eval();
bool termen();
bool factor();
int main()
{
f.getline(s, NMAX);
f>>n;
for(int i = 1; i <= n; ++i)
{
f>>c;
b[c - 'A'] = !b[c - 'A'];
p = s;
g<<eval();
}
g.close();
return 0;
}
bool eval()
{
bool r = factor();
while(*p == 'O' && *(p + 1) == 'R')
{
p += 3;
r = r | factor();
}
return r;
}
bool factor()
{
bool r = termen();
while(*p == 'A' && *(p + 1) == 'N')
{
p += 4;
r = r & termen();
}
return r;
}
bool termen()
{
bool r = 0;
if(*p == '(')
{
++p;
r = eval();
++p;
}
else
if(*p == 'T' && *(p + 1) =='R')
{
p += 5;
r = 1;
}
else
if(*p == 'F' && *(p + 1) == 'A')
{
p += 6;
r = 0;
}
else
if(*p == 'N' && *(p + 1) == 'O')
{
p += 4;
r = !termen();
}
else
{
r = b[*p - 'A'];
p += 2;
}
return r;
}