Pagini recente » Cod sursa (job #3226139) | Cod sursa (job #2971262) | Cod sursa (job #1285905) | Cod sursa (job #737399) | Cod sursa (job #3240651)
#include <fstream>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
int expresie(const string& s, int& p);
int termen(const string& s, int& p);
int factor(const string& s, int& p);
int variabila(const string& s, int& p);
int p = 0, n;
bool fr[127];
string s;
int expresie(const string& s, int& p)
{
int result = termen(s, p);
while(p+1 < (int)s.size() && (s[p] == 'O' && s[p+1] == 'R'))
{
p+=2;
result = result || termen(s, p);
}
return result;
}
int termen(const string& s, int& p)
{
int result = factor(s, p);
while(p+2 < (int)s.size() && (s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D'))
{
p+=3;
result = result && factor(s, p);
}
return result;
}
int factor(const string& s, int& p)
{
if(s[p] == '(')
{
p++;
int result = expresie(s, p);
p++;
return result;
}
else
if(p+2 < (int)s.size() && (s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T'))
{
p+=3;
return !variabila(s, p);
}
else
return variabila(s, p);
}
int variabila(const string& s, int& p)
{
if(p+3 < (int)s.size() && (s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E'))
{
p+=4;
return 1;
}
else
if(p+4 < (int)s.size() && (s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E'))
{
p+=5;
return 0;
}
else
{
p++;
return fr[(int)s[p-1]];
}
}
int main()
{
string x, val;
getline(cin, x);
for(unsigned int i=0; i<=x.size(); i++)
if(x[i] != ' ')
s.push_back(x[i]);
cin >> n;
cin >> val;
for(int i=0; i<n; i++)
{
if(fr[(int)val[i]] == 0)
fr[(int)val[i]] = 1;
else
fr[(int)val[i]] = 0;
p = 0;
cout << expresie(s, p);
}
return 0;
}