Pagini recente » Cod sursa (job #511184) | Cod sursa (job #1287378) | Cod sursa (job #1659297) | Cod sursa (job #1161481) | Cod sursa (job #2320298)
#include <fstream>
#include <cstring>
using namespace std;
ofstream cout("bool.out");
ifstream cin("bool.in");
int p = 0,n,j;
char v[1005],s[1005];
bool variabile[1005];
bool termen();
bool NOT();
bool nr();
bool expresie()
{
bool rez = termen();
//cout << rez;
while(s[p] == '|')
{
p++;
rez = rez | termen();
}
return rez;
}
bool termen()
{
bool rez = NOT();
while(s[p] == '&')
{
p++;
rez = rez & NOT();
}
return rez;
}
bool NOT()
{
if(s[p] == '!')
{
p++;
return !NOT();
}
p++;
return nr();
}
bool nr()
{
bool rez;
if(s[p] >= 'A' && s[p] <= 'Z')
{
rez = variabile[s[p] - 'A' + 1];
p++;
}
else if(s[p] == '(')
{
p++;
rez = expresie();
p++;
}
else if(s[p] == '1')
{
p++;
return true;
}else if(s[p] == '0'){
p++;
return false;
}
return rez;
}
int main()
{
int i;
cin.getline(v, 1005);
int n = strlen(v);
for(i = 0; i < n;)
{
if(v[i] == 'A' && v[i + 1] == 'N' && v[i+2] == 'D')
{
s[++j] = '&';
i += 3;
}
else if(v[i] == 'O' && v[i + 1] == 'R')
{
s[++j] = '|';
i+=2;
}
else if(v[i] == 'F' && v[i + 1] == 'A' && v[i+2] == 'L' && v[i+3] == 'S' && v[i+4] == 'E')
{
s[++j] = '0';
i += 5;
}
else if(v[i] == 'T' && v[i+1] == 'R' && v[i+2] == 'U' && v[i+3] == 'E')
{
s[++j] = '1';
i += 4;
}
else if(v[i] == 'N' && v[i+1] == 'O' && v[i+2] == 'T')
{
s[++j] = '!';
i += 3;
}
else if(v[i] == '(')
{
s[++j] = '(';
i++;
}
else if(v[i] == ')')
{
s[++j] = ')';
i++;
}
else if(v[i] >= 'A' && v[i] <= 'Z')
{
s[++j] = v[i];
i++;
}
else
{
i++;
}
}
cin >> n;
for(i = 1; i <= n; i++)
{
char ch;
cin >> ch;
p = 0;
variabile[ch - 'A' + 1] ^= 1;
cout << expresie();
}
return 0;
}