Pagini recente » Cod sursa (job #2890385) | Cod sursa (job #315196) | Cod sursa (job #165819) | Cod sursa (job #664318) | Cod sursa (job #1872030)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int v[102], p;
char s[1006];
int expresie();
int termen();
int factor();
int sau(int a, int b)
{
if(a==0 && b==0)
return 0;
return 1;
}
int si(int a, int b)
{
if(a==1 && b==1)
return 1;
return 0;
}
int expresie()
{
int r = termen();
while(s[p]=='|')
{
p++;
r |= termen();
}
return r;
}
int termen()
{
int r = factor();
while(s[p]=='&')
{
p++;
r &= termen();
}
return r;
}
int factor()
{
int r = 0, no = 0;
while (s[p] == '!')
{
no = !no;
p++;
}
if(s[p]=='(')
{
p++;
r = expresie();
p++;
if (no==1)
return !r;
return r;
}
if (s[p] == '1') {
p++;
if (no == 1)
return 0;
return 1;
}
if (s[p] == '0') {
p++;
if (no == 1)
return 1;
return 0;
}
if (s[p]>='A' && s[p]<='Z')
{
if(no == 1)
r = !v[s[p]];
else
r = v[s[p]];
p++;
return r;
}
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
int i, n, j=0;
char a[1001], c;
cin.get(a, 1001);
n = strlen(a);
for(i = 0; i < n; i++)
{
if(a[i]!=' ')
{
if(a[i]=='A')
{
if(a[i+1]=='N')
{
s[j++]='&';
i+=2;
}
else s[j++]=a[i];
}else if(a[i]=='O')
{
if(a[i+1]=='R')
{
s[j++]='|';
i+=1;
}
else s[j++]=a[i];
}else if(a[i]=='N')
{
if(a[i+1]=='O')
{
s[j++]='!';
i+=2;
}
else s[j++]=a[i];
}else if(a[i]=='T')
{
if(a[i+1]=='R')
{
s[j++]='1';
i+=3;
}
else s[j++]=a[i];
}else if(a[i]=='F')
{
if(a[i+1]=='A')
{
s[j++]='0';
i+=4;
}
else s[j++]=a[i];
}
else s[j++]=a[i];
}
}
s[j] = NULL;
cin >> n;
for (i = 1; i <= n;i++)
{
cin >> c;
if(v[c] == 0)
v[c] = 1;
else
v[c] = 0;
p = 0;
cout<<expresie();
}
return 0;
}