Pagini recente » Cod sursa (job #3265850) | Cod sursa (job #2060073) | Cod sursa (job #1659318) | Cod sursa (job #2876149) | Cod sursa (job #3196130)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char s[1010],l[1010],ch;
int q,j,k,i,n,fr[30];
bool expresie ();
bool termen ();
bool factor ();
bool expresie () ///or
{
bool r=termen ();
while (l[i]=='|')
{
i++;
r=r||termen ();
}
return r;
}
bool termen () ///and
{
bool r=factor ();
while (l[i]=='&')
{
i++;
r=r&&factor ();
}
return r;
}
bool factor () ///not,expresie,numar
{
bool r,ok=0;
if (l[i]=='!')
{
i++;
ok=1;
}
if (l[i]>='A'&&l[i]<='Z')
{
r=fr[l[i]-'A'+2];
i++;
}
else if (l[i]=='0'||l[i]=='1')
{
r=fr[l[i]-'0'];
i++;
}
else
{
i++;
r=expresie ();
i++;
}
if (ok==1)
r=1-r;
return r;
}
int main ()
{
fin.getline (s,1005);
fin>>q;
n=strlen (s);
for (i=0; i<n; i++)
{
if (s[i]>='A'&&s[i]<='Z'&&(s[i+1]==' '||s[i+1]==0||s[i+1]=='('||s[i+1]==')'))
l[++k]=s[i];
else if (s[i]=='A'&&s[i+1]=='N')
{
l[++k]='&';
i+=2;
}
else if (s[i]=='O'&&s[i+1]=='R')
{
l[++k]='|';
i++;
}
else if (s[i]=='N'&&s[i+1]=='O')
{
l[++k]='!';
i+=2;
}
else if (s[i]=='T'&&s[i+1]=='R')
{
l[++k]='1';
i+=3;
}
else if (s[i]=='F'&&s[i+1]=='A')
{
l[++k]='0';
i+=4;
}
else if (s[i]=='('||s[i]==')')
l[++k]=s[i];
}
fr[1]=1;
for (j=1; j<=q; j++)
{
i=1;
fin>>ch;
fr[ch-'A'+2]=1-fr[ch-'A'+2];
fout<<expresie ();
}
return 0;
}