Pagini recente » Cod sursa (job #2500458) | Cod sursa (job #1158771) | Cod sursa (job #1339937) | Cod sursa (job #2429603) | Cod sursa (job #2327609)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int N=1e3+1;
char s[N];
char v[N];
bool val1[N];
int p=1;
int expresie();
int termen();
int factor();
int expresie()
{
int sum=termen();
while(v[p]=='|')
{
p++;
sum=sum|termen();
}
return sum;
}
int termen()
{
int val=factor();
while(v[p]=='&')
{
p++;
val=val&factor();
}
return val;
}
int factor()
{
int val=0, x=0;
while(v[p]=='!')
{
p++;
x=-x;
}
if(v[p]=='(')
{
p++;
val=expresie();
p++;
if(x)
return !val;
return val;
}
p++;
if((v[p-1]=='0'||v[p-1]=='1')&&x)
return !(v[p-1]-'0');
if(v[p-1]=='0'||v[p-1]=='1')
return v[p-1]-'0';
if(x)
return !val1[v[p-1]-'A'];
return val1[v[p-1]-'A'];
}
int main()
{
int cnt=0,poz,n=0,i,x;
in>>(s+1);
while(s[1]<'0'||s[1]>'9')
{
if(strlen(s+1)==1)
v[++cnt]=s[1];
else if(s[1]=='O'&&s[2]=='R')
v[++cnt]='|';
else if(s[2]=='N'&&s[1]=='A')
v[++cnt]='&';
else
{
poz=1;
while(s[poz]=='('&&s[poz]!=' ')
{
v[++cnt]='(';
poz++;
}
if(s[poz+1]=='R')
{
v[++cnt]='1';
poz+=4;
}
else if(s[poz+1]=='A')
{
v[++cnt]='0';
poz+=4;
}
else if(s[poz+1]=='O')
v[++cnt]='!';
else
{
v[++cnt]=s[poz];
poz++;
}
while(s[poz]==')'&&s[poz]!=' ')
{
v[++cnt]=')';
poz++;
}
}
in>>(s+1);
}
x=strlen(s+1);
for(int i=1; i<=x; i++)
n=n*10+s[i]-'0';
in>>s;
for(i=0; i<n; i++)
{
val1[s[i]-'A']=1-val1[s[i]-'A'];
p=1;
out<<expresie();
}
return 0;
}