Pagini recente » Cod sursa (job #1796262) | Cod sursa (job #2963906) | pregatire_lot_juniori_1 | Cod sursa (job #291168) | Cod sursa (job #2320312)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char s[1001];
char v[1001];
bool val1[26];
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=1;
}
if(v[p]=='(')
{
p++;
val=expresie();
p++;
if(x)
return !val;
return val;
}
if(v[p]=='0'||v[p]=='1'&&x)
return !(v[p]-'0');
if(v[p]=='0'||v[p]=='1')
return v[p]-'0';
if(x)
return !val1[v[p]-'A'];
return val1[v[p]-'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[2]=='O')
v[++cnt]='!';
else if(s[1]=='O'&&s[2]=='R')
v[++cnt]='|';
else if(s[2]=='N')
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+=5;
}
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;
}