Pagini recente » Cod sursa (job #1764072) | Cod sursa (job #2034087) | Cod sursa (job #3228730) | Cod sursa (job #1057146) | Cod sursa (job #2790749)
#include <fstream>
#include <cstring>
#define NMAX 1005
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char s[NMAX], v[NMAX];
int frecv[NMAX];
int i, n, k, rez;
bool isdigit (char x)
{
return x >= '0' && x <= '9';
}
//int si();
//int sau();
int sisau();
int factor ()
{
//out << v[i] << '\n';
int nr;
if (v[i] == '!')
{
++i;
nr = (sisau() + 1) % 2;
++i;
//out << 1 << '\n';
}
else if (v[i] == '(')
{
//out << 2 << '\n';
++i;
nr = sisau();
++i;
}
else if (isdigit(v[i]))
{
//out << 3 << '\n';
nr = v[i] - '0';
++i;
}
return nr;
}
/*int si ()
{
int rez = factor();
while (s[i] == '&')
{
++i;
int x = factor();
if (rez == 1 && x == 1)
rez = 1;
else
rez = 0;
}
return rez;
}
int sau ()
{
int rez = si();
while (s[i] == '|')
{
++i;
int x = si();
if(rez == 0 && x == 0)
rez = 0;
else
rez = 1;
}
return rez;
}*/
int sisau ()
{
int rez = factor();
while (v[i] == '&' || v[i] == '|')
{
++i;
int x = factor();
if (v[i] == '&')
{
if(rez == 1 && x == 1)
rez = 1;
else
rez = 0;
}
else if (v[i] == '|')
{
if (rez == 0 && x == 0)
rez = 0;
else
rez = 1;
}
}
return rez;
}
void transformare()
{
i = 0;
k = 0;
while (i < n)
{
if (s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D')
{
v[k] = '&';
++k;
i = i + 2;
}
else if (s[i] == 'O' && s[i + 1] == 'R')
{
v[k] = '|';
++k;
i = i + 1;
}
else if (s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T')
{
v[k] = '!';
++k;
i = i + 2;
}
else if (s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E')
{
v[k] = '1';
++k;
i = i + 3;
}
else if (s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E')
{
v[k] = '0';
++k;
i = i + 4;
}
else if (s[i] == '(' || s[i] == ')')
{
v[k] = s[i];
++k;
}
else if (s[i] >= 'A' && s[i] <= 'Z')
{
v[k] = frecv[s[i]] + '0';
++k;
}
++i;
}
}
int main()
{
int j;
char ch;
in.getline(s, NMAX);
n = strlen(s);
int N;
in >> N;
in.get();
for (j = 1; j <= N; j++)
{
in.get(ch);
//out << ch << '\n';
frecv[ch] = (frecv[ch] + 1) % 2;
transformare();
i = 0;
rez = factor();
while (i < k)
{
if (v[i] == '&')
{
++i;
int x = factor();
if (rez == 1 && x == 1)
rez = 1;
else
rez = 0;
}
else if (v[i] == '|')
{
++i;
int x = factor();
if (rez == 0 && x == 0)
rez = 0;
else
rez = 1;
}
}
out << rez;
//out << " " << i << '\n';
/*for (int l = 0; l < k; l++)
{
out << v[l];
}
out << '\n';*/
}
return 0;
}