Pagini recente » Cod sursa (job #2584393) | Cod sursa (job #478497) | Cod sursa (job #1112274) | Cod sursa (job #3038092) | Cod sursa (job #598111)
Cod sursa(job #598111)
# include <fstream>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
char s[1200], s2[1200], c;
int n, i, in, val[200];
int si ();
int sau ();
int nt ();
int termen ();
int si ()
{
int val = nt ();
while (s[in] == '&')
{
if (s[in] == '&')
{
++in;
val = val and nt ();
}
}
return val;
}
int sau ()
{
int val = si ();
while (s[in] == '|')
{
if (s[in] == '|')
{
++in;
val = val or si ();
}
}
return val;
}
int nt ()
{
int vl = 0;
if (s[in] == '!')
{
++in;
vl = not vl;
}
if (s[in] == '(')
{
++in;
vl = vl xor sau ();
++in;
}
else
{
vl = vl xor val[s[in] - 0];
++in;
}
return vl;
}
int l;
int main ()
{
f.get (s, 1100);
int ls = strlen (s);
val['1' - 0] = 1; val['0' - 0] = 0;
for (i = 0; i < ls; )
{
if (s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E')
s2[l++] = '1', i += 4;
else
if (s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E')
s2[l++] = '0', i += 5;
else
if (s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D')
s2[l++] = '&', i += 3;
else
if (s[i] == 'O' && s[i + 1] == 'R')
s2[l++] = '|', i += 2;
else
if (s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T')
s2[l++] = '!', i += 3;
else
if (s[i] >= 'A' && s[i] <= 'Z')
s2[l++] = s[i], ++i;
else
if (s[i] == '(' || s[i] == ')')
s2[l++] = s[i], ++i;
else ++i;
}
memcpy (s, s2, sizeof (s2));
f >> n;
for (i = 1; i <= n; ++i)
{
f >> c;
in = 0;
val[c - 0] = not val[c - 0];
g << sau ();
}
g.close ();
return 0;
}