Pagini recente » Cod sursa (job #2462020) | Cod sursa (job #572107) | Cod sursa (job #2819007) | Cod sursa (job #1670306) | Cod sursa (job #2721381)
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
const int N = 1005;
int idx = 0;
char s[N], c[N];
bool f[30];
int expresie();
int factor();
int termen();
int numar();
int expresie()
{
int rez = termen();
while(c[idx] == '|')
{
idx ++;
int tmp = termen();
rez = rez || tmp;
}
return rez;
}
int termen()
{
int rez = factor();
while(c[idx] == '&')
{
idx ++;
int tmp = factor();
rez = rez && tmp;
}
return rez;
}
int factor()
{
bool x = 0;
while(c[idx] == '!')
{
x = 1 - x;
idx ++;
}
int rez = numar();
return (1 - rez) * x + rez * (1 - x);
}
int numar()
{
int rez;
if(c[idx] == '(')
{
idx ++;
rez = expresie();
idx ++;
}
else{
if( 'A'<= c[idx] && c[idx] <= 'Z')
{
rez = f[c[idx] - 'A'];
idx ++;
}
else{
rez = c[idx] - '0';
idx ++;
}
}
return rez;
}
int main()
{
cin.get(s,N);
int n = strlen(s), k = 0, poz = 0 , q;
while(k < n)
{
if(s[k] >= 'A' && s[k] <= 'Z')
{
if(s[k + 1] >= 'A' && s[k + 1] <= 'Z')
{
if(s[k] == 'A')
{
c[poz ++] = '&';
k += 3;
}
else if(s[k] == 'O')
{
c[poz ++] = '|';
k += 2;
}
else if(s[k] == 'N')
{
c[poz ++] = '!';
k += 3;
}
else if(s[k] == 'F')
{
c[poz ++] = '0';
k += 4;
}
else if(s[k] == 'T')
{
c[poz ++] = '1';
k += 4;
}
}
else{
c[poz ++] = s[k];
k ++;
}
}
else if(s[k] == ' ')
k ++;
else if(s[k] == '(' || s[k] == ')')
{
c[poz ++] = s[k];
k ++;
}
}
cin >> q;
char l;
for(int i = 0;i < q;i ++)
{
cin >> l;
f[l - 'A'] = !f[l - 'A'];
idx = 0;
cout << expresie();
}
return 0;
}