Pagini recente » Cod sursa (job #1574708) | Cod sursa (job #2011633) | Cod sursa (job #153900) | Cod sursa (job #1389743) | Cod sursa (job #1574159)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
const int MAX = 2005, MAXI = 2005;
char s[MAX], a[MAXI];
int n, p;
bool var[500];
bool expresie();
bool termen();
bool factor();
int main()
{
cin.get(s, MAX);
cin>>n;
int poz = 0, bune = 0;
for(poz = 0; s[poz]; ++poz)
{
if(s[poz] == 'N' and s[poz+1] == 'O')
{
s[bune++] = '!';
poz += 2;
continue;
}
if(s[poz] == 'A' and s[poz+1] == 'N')
{
s[bune++] = '&';
poz += 2;
continue;
}
if(s[poz] == 'O' and s[poz+1] == 'R')
{
s[bune++] = '|';
poz += 1;
continue;
}
if(s[poz] == 'T' and s[poz+1] == 'R')
{
s[bune++] = '1';
poz += 3;
continue;
}
if(s[poz] == 'F' and s[poz+1] == 'A')
{
s[bune++] = '0';
poz += 4;
continue;
}
if(s[poz] == ' ') continue;
s[bune++] = s[poz];
}
s[bune] = NULL;
//cout<<s<<endl;
for(int i=1; i<=n; ++i)
{
char ch; cin>>ch;
var[ ch-'A' ] = ! var[ ch-'A' ];
p = 0;
cout<<expresie();
}
return 0;
}
bool expresie()
{
bool rez, ans = termen();
while(s[p] == '|')
{
p++;
rez = termen();
ans = (ans or rez);
}
return ans;
}
bool termen()
{
bool rez, ans = factor();
while(s[p] == '&')
{
p++;
rez = factor();
ans = (ans and rez);
}
return ans;
}
bool factor()
{
bool r;
while (s[p] == '!')
{
p++;
r = factor();
return !r;
}
if (s[p] == '(')
{
p++;
r = expresie();
}
else if (s[p] == '1'){ r = true; }
else if (s[p] == '0'){ r = false; }
else r = var[s[p] - 'A'];
p++;
return r;
}