Pagini recente » Cod sursa (job #1735360) | Cod sursa (job #494861) | Cod sursa (job #2469657) | Cod sursa (job #2721042) | Cod sursa (job #2376245)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char s[1005],c;
int i,fv[30],m,n,j;
bool termen();
bool factor();
bool eval();
bool termen()
{
bool r=factor();
while(s[i]=='|')
{
i++;
r=(r|factor());
}
return r;
}
bool factor()
{
bool r=eval();
while(s[i]=='&')
{
i++;
r=(r&eval());
}
return r;
}
bool eval()
{
bool r;
if(s[i]=='(')
{
i++;
r=termen();
i++;
}
else if(s[i]=='!')
{
i++;
r=1-eval();
}
else if(s[i]=='1')
{
i++;
r=1;
}
else if(s[i]=='0')
{
i++;
r=0;
}
else
{
r=fv[s[i]-'A'+1];
i++;
}
return r;
}
int main()
{
f.getline(s,1005);
i=0;
while(i<strlen(s))
{
if(s[i]==' ')strcpy(s+i,s+i+1);
i++;
}
i=0;
while(i<strlen(s))
{
if(s[i]=='O'&&s[i+1]=='R')
{
s[i]='|';
strcpy(s+i+1,s+i+2);
}
if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
{
s[i]='1';
strcpy(s+i+1,s+i+4);
}
if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
{
s[i]='0';
strcpy(s+i+1,s+i+5);
}
if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
s[i]='&';
strcpy(s+i+1,s+i+3);
}
if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
s[i]='!';
strcpy(s+i+1,s+i+3);
}
i++;
}
n=strlen(s);
f>>m;
for(j=1;j<=m;j++)
{
f>>c;
fv[c-'A'+1]=1-fv[c-'A'+1];
i=0;
g<<termen();
}
return 0;
}