Pagini recente » Cod sursa (job #1862592) | Cod sursa (job #3183152) | Cod sursa (job #3227288) | Clasament wellcodesimulareclasa9-9martie | Cod sursa (job #2792170)
#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, j, l;
bool isdigit (char x)
{
return x >= '0' && x <= '9';
}
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 si();
int sau();
int factor ()
{
int nr;
if (isdigit(v[i]))
{
nr = v[i] - '0';
++i;
}
else if (v[i] == '!')
{
int neg = 0;
while (v[i] == '!')
{
neg = (neg + 1) % 2;
++i;
}
nr = (v[i] - '0' + neg) % 2;
}
else if (v[i] == '(')
{
++i;
sau();
++i;
}
return nr;
}
int sau ()
{
int rez = si();
while (v[i] == '|')
{
++i;
int x = si();
rez = rez | x;
}
return rez;
}
int si ()
{
int rez = factor();
while (v[i] == '&')
{
++i;
int x = factor();
rez = rez & x;
}
return rez;
}
int main()
{
char ch;
in.getline(s, NMAX);
n = strlen(s);
int N;
in >> N;
for (j = 1; j <= N; j++)
{
in >> ch;
frecv[ch] = (frecv[ch] + 1) % 2;
transformare();
i = 0;
int rez;
rez = sau();
out << rez;
/*for (l = 0; l < k; l++)
{
out << v[l];
}
out << '\n';*/
}
return 0;
}