Pagini recente » Cod sursa (job #1274239) | Cod sursa (job #2649997) | Cod sursa (job #373356) | Cod sursa (job #843468) | Cod sursa (job #2292784)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int N;
string s;
bool charVal[32];
bool EvalExp(int &p); ///ORs
bool Ands(int &p); ///ANDs
bool Nots(int &p); ///NOTs, Brackets, Letters, Constants
bool EvalExp(int &p)
{
bool ans = Ands(p);
while(s[p] == ' ' || (p < s.size() - 1 && (s[p] == 'O' && s[p] == 'R')))
{
if(s[p] == ' ')
p++;
else
{
p += 2;
ans = ans | Ands(p);
}
}
return ans;
}
bool Ands(int &p)
{
bool ans = Nots(p);
while(s[p] == ' ' || (p < s.size() - 2 && (s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D')))
{
if(s[p] == ' ')
p++;
else
{
p += 3;
ans = ans & Nots(p);
}
}
return ans;
}
bool Nots(int &p)
{
bool ans;
while(s[p] == ' ')
p++;
if(s[p] == '(')
{
p++;
ans = EvalExp(p);
p++;
}
else if(p < s.size() - 2 && (s[p] == 'N' && s[p + 1] == '0' && s[p + 2] == 'T'))
{
p += 3;
ans = !EvalExp(p);
}
else if(p < s.size() - 3 && (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E'))
{
p += 4;
ans = 1;
}
else if(p < s.size() - 4 && (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E'))
{
p += 5;
ans = 0;
}
else
{
ans = charVal[s[p] - 'A'];
p++;
}
return ans;
}
int main()
{
fin >> s;
fin.get();
char c;
fin >> N;
for(int i = 1; i <= N; i++)
{
fin >> c;
charVal[c - 'A'] = !charVal[c - 'A'];
int p = 0;
fout << EvalExp(p);
}
return 0;
}