Pagini recente » Cod sursa (job #2331368) | Cod sursa (job #2074241) | Cod sursa (job #1801060) | Cod sursa (job #1506399) | Cod sursa (job #2271438)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char c[100001],c1;
char var[101];
char v[100001];
bool fr[200];
int n;
int i;
int expresie(),termen(),factor();
int expresie()
{
int r=0;
r=termen();
int aux;
while(c[i]=='|')
{
{
i++;
aux=termen();
r=(r | aux );
}
}
return r;
}
int termen(){
int r;
bool ok=0;
r=factor();
while(c[i]=='&'){
i++;
r &=factor();
}
return r;
}
int factor()
{
int r=0;
if(c[i]=='(')
{
i++;
r=expresie();
i++;
}
else if(c[i]>='A'&&c[i]<='[')
{
int r1=c[i];
/// cout<<c[i]<<" "<<fr[r1]<<endl;
r=fr[c[i]];
}
else if(c[i]=='!')
{
if(c[i]+1=='(')
{
i+=2;
r=1-expresie();
i++;
}
else
{
i++;
r=1-termen();
}
}
return r;
}
int main()
{
fr['[']=1;
int k=-1;
while( fin>>v)
{
if(v[0]>='0'&&v[0]<='9')
break;
for(int i=0; i<strlen(v); i++)
{
if(v[i]==' ')
continue;
else if(v[i]=='T'&&v[i+1]=='R'){
c[++k]='[';
i+=3;
}
else if(v[i]=='F'&&v[i+1]=='A')
{
c[++k]=']';
i+=4;
}
else if(v[i]=='A'&&v[i+1]=='N'){
c[++k]='&';
i+=2;
}
else if(v[i]=='O'&&v[i+1]=='R'){
c[++k]='|';
i++;
}
else if(v[i]=='N'&&v[i+1]=='O'){
c[++k]='!';
i+=2;
}
else
c[++k]=v[i];
}
}
/// for(int i=0;i<=strlen(c);i++)
/// fout<<c[i];
fin>>var;
for(int i1=0; i1<strlen(var); i1++)
{
int numar=var[i1]-0;
fr[numar]=1-fr[numar];
i=0;
fout<<expresie();
}
}