Pagini recente » Cod sursa (job #2095616) | Cod sursa (job #3244479) | Cod sursa (job #2761543) | Cod sursa (job #1648183) | Cod sursa (job #2320319)
#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-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+=5;
}
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'];
/*for(int j=1; j<=cnt; j++)
{
if(v[j]>='A'&&v[j]<='Z')
out<<val1[v[j]-'A'];
else
out<<v[j];
}
out<<'\n';*/
p=1;
out<<expresie();
}
return 0;
}