Pagini recente » Cod sursa (job #1713667) | Cod sursa (job #2611589) | Cod sursa (job #2571721) | Cod sursa (job #1658922) | Cod sursa (job #2030923)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n, i, j, p;
bool v[30];
string s, c;
bool termAND();
bool factNOT();
bool evalOR ()
{
while (s[p] == ' ') p++;
bool r = termAND();
while (s[p] == 'O' && s[p+1] == 'R')
{
p += 2;
if (s[p] == ' ') p++;
if (termAND() == 1 || r == 1) r = 1;
else r = 0;
}
return r;
}
bool termAND ()
{
if (s[p] == ' ') p++;
bool r = factNOT();
while (s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D')
{
p += 3;
if (s[p] == ' ') p++;
if (factNOT() == 1 && r == 1) r = 1;
else r = 0;
}
return r;
}
bool factNOT ()
{
bool r = 0, k = 0;
if (s[p] == ' ') p++;
while (s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T')
{
p += 3;
if (k == 0) k = 1;
else k = 0;
if (s[p] == ' ') p++;
}
if (s[p] == '(')
{
p++; if (s[p] == ' ') p++;
r = evalOR();
p++; if (s[p] == ' ') p++;
}
if (s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E')
{ p += 4; r = 1; }
else if (s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E')
{ p += 5; r = 0; }
else if (s[p] >= 65 && s[p] <= 90 && s[p+1] != 'O' && (s[p+1] < 65 || s[p+1] > 90))
{
int x = s[p] - 64;
r = v[x]; p++;
}
if (s[p] == ' ') p++;
if (r == 0 && k == 1) r = 1;
else if (r == 1 && k == 1) r = 0;
return r;
}
int main () {
getline(fin, s);
s[s.size()] = ' ';
fin >> n; getline(fin, c);
getline(fin, c);
int x = 0;
for (i = 0; i < n; i++)
{
x = c[i] - 64;
if (v[x] == 1) v[x] = 0;
else if (v[x] == 0) v[x] = 1;
p = 0;
fout << evalOR();
}
}