Pagini recente » Cod sursa (job #3130849) | Profil Elena_Petcu | Cod sursa (job #2025830) | Cod sursa (job #967064) | Cod sursa (job #2023943)
#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 ()
{
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 ()
{
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] == 'N' && s[p+1] == 'O' && s[p+2] == 'T')
{
p += 3; k = 1;
if (s[p] == ' ') p++;
}
if (s[p] == '(')
{
p++; if (s[p] == ' ') p++;
r = evalOR();
p++; if (s[p] == ' ') p++;
}
else if (s[p] >= 65 && s[p] <= 90)
{
if (s[p+1] == ')' || s[p+1] == ' ' || p+1 == s.size()-1)
{
int x = s[p] - 64;
r = v[x];
p++;
}
else 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; }
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);
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();
}
}