Pagini recente » Cod sursa (job #2339922) | Cod sursa (job #3033111) | Cod sursa (job #1271788) | Cod sursa (job #368174) | Cod sursa (job #3199374)
#include <bits/stdc++.h>
using namespace std;
#define Dumnezeu
ifstream in ("bool.in");
ofstream out ("bool.out");
const int LIM=92,DIM=1005;
int n;
char curr[DIM],s[DIM];
char ch;
int cnt;
int fr[LIM];
bool expresie ();
bool termen ();
bool factor ();
bool finall ();
bool expresie()
{
bool res;
res=termen();
while(cnt+1<strlen(s) && (s[cnt]=='O' && s[cnt+1]=='R'))
{
cnt+=2;
res=(res | termen());
}
return res;
}
bool termen()
{
bool res;
res=factor();
while(cnt+2<strlen(s) && (s[cnt]=='A' && s[cnt+1]=='N' && s[cnt+2]=='D'))
{
cnt+=3;
res=(res & factor());
}
return res;
}
bool factor()
{
bool res;
if(cnt+2<strlen(s) && s[cnt]=='N' && s[cnt+1]=='O' && s[cnt+2]=='T')
{
cnt+=3;
res=(1 ^ factor());
}
else if(s[cnt]=='(')
{
cnt++;
res = expresie();
cnt++;
}
else
{
res=finall();
cnt++;
}
return res;
}
bool finall()
{
bool res;
if(cnt+3<strlen(s) && s[cnt]=='T' && s[cnt+1]=='R' && s[cnt+2]=='U' && s[cnt+3]=='E')
{
res=true;
cnt+=3;
}
else if(cnt+4<strlen(s) && s[cnt]=='F' && s[cnt+1]=='A' && s[cnt+2]=='L' && s[cnt+3]=='S' && s[cnt+4]=='E')
{
res=false;
cnt+=4;
}
else
{
res=fr[s[cnt]];
}
return res;
}
int main()
{
in.getline(curr,DIM);
in>>n;
for(int i=0; i<strlen(curr); i++)
{
if(curr[i]==' ')
continue;
else
s[cnt++]=curr[i];
}
for(int i=1; i<=n; i++)
{
cnt=0;
in>>ch;
fr[ch]=(fr[ch] ^ 1);
out<<expresie();
}
return 0;
}