Pagini recente » Cod sursa (job #3041412) | Cod sursa (job #3151878) | Cod sursa (job #1887576) | Cod sursa (job #2723114) | Cod sursa (job #1187954)
#include <fstream>
#define Nmax 1009
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n, p;
char V[Nmax], c, Alf['Z' - 'A' + 9];
inline bool Termen();
inline bool Factor();
inline bool Eval()
{
int sol = Factor();
while(V[p] == 'O' && V[p+1] == 'R')
{
if(V[p] == 'O') { p += 3; sol |= Factor(); }
}
return sol;
}
inline bool Factor()
{
int sol = Termen();
while(V[p] == 'A' && V[p+1] == 'N' && V[p+2] == 'D')
{
if(V[p] == 'A') { p += 4; sol &= Termen(); }
}
return sol;
}
inline bool Termen()
{
int sol = 0;
if(V[p] == '(') { p += 1; sol = Eval(); p += 1; }
else if(V[p] == 'T' && V[p+1] == 'R') { p += 5; sol = 0; }
else if(V[p] == 'F' && V[p+1] == 'A') { p += 6; sol = 1; }
else if(V[p] == 'N' && V[p+1] == 'O') { p += 4; sol = 1 - Termen(); }
else { p += 2; sol = Alf[V[p-2] - 'A' + 1]; }
return sol;
}
int main()
{
fin.getline(V + 1, Nmax);
fin >> n;
fin.get(c);
for(int i=1; i<=n; i++)
{
fin.get(c);
Alf[c - 'A' + 1] = 1 - Alf[c - 'A' + 1];
p = 1;
fout << Eval();
}
fout << '\n';
fout.close();
return 0;
}