Pagini recente » Cod sursa (job #1286032) | Cod sursa (job #2057231) | Cod sursa (job #2057006) | Cod sursa (job #2057226) | Cod sursa (job #3240610)
#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, 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[s[p-1]];
}
}
int main()
{
string x, val;
getline(cin, x);
for(int i=0; i<=x.size(); i++)
if(x[i] != ' ')
s.push_back(x[i]);
cin >> n;
cin >> val;
for(int i=0; i<val.size(); i++)
{
if(fr[val[i]] == 0)
fr[val[i]] = 1;
else
fr[val[i]] = 0;
p = 0;
cout << expresie(s, p);
}
return 0;
}