Pagini recente » Cod sursa (job #1556006) | Cod sursa (job #851485) | Cod sursa (job #732446) | Cod sursa (job #222070) | Cod sursa (job #1823615)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char sir[100001];
char sir2[100001];
void simplificare();
bool expresie();
int termen();
int factor();
int k=0, p=0, len, j;
bool v[100001];
char schimb;
void simplificare()
{
if(sir[p]==0)
{
return;
}
for(p=0; p<len; p++)
{
if(sir[p]=='A' && sir[p+1]=='N' && sir[p+2]=='D')
{
sir2[k]='&';
p+=2;
k++;
}
else if(sir[p]=='O' && sir[p+1]=='R')
{
sir2[k]='|';
p+=1;
k++;
}
else if(sir[p]=='N' && sir[p+1]=='O' && sir[p+2]=='T')
{
sir2[k]='!';
p+=2;
k++;
}
else if(sir[p]=='T' && sir[p+1]=='R' && sir[p+2]=='U' && sir[p+3]=='E')
{
sir2[k]='1';
p+=3;
k++;
}
else if(sir[p]=='F' && sir[p+1]=='A' && sir[p+2]=='L' && sir[p+3]=='S' && sir[p+4]=='E')
{
sir2[k]='0';
p+=4;
k++;
}
else if(sir[p]!=' ')
{
sir2[k]=sir[p];
k++;
}
}
}
bool expresie()
{
bool rez=factor();
while(sir2[j]=='&' || sir2[j]=='|' || sir2[j]=='!')
{
if(sir2[j]=='&')
{
j++;
rez=(rez && factor());
}
else if(sir2[j]=='|')
{
j++;
rez=(rez || factor());
}
else if(sir2[j]=='!')
{
j++;
rez=!rez;
}
}
return rez;
}
int factor()
{
bool rez;
if(sir2[j]=='(')
{
p++;
rez=expresie();
p++;
return rez;
}
if(isdigit(sir2[j]))
{
rez=(bool)(sir2[j]-'0');
}
else if(sir2[j]==schimb){
v[sir2[j]]=!v[sir2[j]];
rez=v[sir2[j]];
}
else {rez=v[sir2[j]];}
return rez;
}
int main()
{
int n;
fin.getline(sir,100001);
fin>>n;
len=strlen(sir);
simplificare();
for(int i=0; i<n; i++)
{
fin>>schimb;
fout<<expresie();
}
return 0;
}