Pagini recente » Cod sursa (job #528355) | Cod sursa (job #888316) | Cod sursa (job #264581) | Cod sursa (job #2670002) | Cod sursa (job #2128789)
#include<fstream>
#include<cstring>
#include<cctype>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int nmax=1000;
char s[nmax+5]; int n;
int value[30];
int m;
char ch;
int stiva_nr[nmax+5],vf_nr;
int stiva_semne[nmax+5],vf_semne;
bool cif(char X)
{
if('A'<=X and X<='Z')
return 1;
return 0;
}
int evaluare()
{
vf_nr=vf_semne=0;
int poz=0;
while(poz<n)
{
if(cif(s[poz]))
{
if(poz+1==n or !cif(s[poz+1]))
{
stiva_nr[++vf_nr]=value[s[poz]-'A'];
poz++;
continue;
}
if(s[poz]=='T' and s[poz+1]=='R' and s[poz+2]=='U' and s[poz+3]=='E')
{
stiva_nr[++vf_nr]=1;
poz+=4;
continue;
}
if(s[poz]=='F' and s[poz+1]=='A' and s[poz+2]=='L' and s[poz+3]=='S' and s[poz+4]=='E')
{
stiva_nr[++vf_nr]=0;
poz+=5;
continue;
}
}
if(s[poz]==' ')
{
poz++;
continue;
}
if(s[poz]=='(')
{
stiva_semne[++vf_semne]='(';
poz++;
continue;
}
if(s[poz]==')')
{
///cout<<"START\n";
///cout<<vf_semne<<"\n";
while(stiva_semne[vf_semne]!='(')
{
if(stiva_semne[vf_semne]=='1')
{
stiva_nr[vf_nr]=1-stiva_nr[vf_nr];
vf_semne--;
continue;
}
vf_nr--;
if(stiva_semne[vf_semne]=='2')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]&&stiva_nr[vf_nr+1]);
if(stiva_semne[vf_semne]=='3')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]||stiva_nr[vf_nr+1]);
vf_semne--;
}
vf_semne--;
poz++;
continue;
}
if(s[poz]=='N' and s[poz+1]=='O' and s[poz+2]=='T')
{
while(vf_semne and stiva_semne[vf_semne]=='1')
{
vf_semne--;
stiva_nr[vf_nr]=1-stiva_nr[vf_nr];
}
stiva_semne[++vf_semne]='1';
poz+=3;
continue;
}
if(s[poz]=='A' and s[poz+1]=='N' and s[poz+2]=='D')
{
while(vf_semne and (stiva_semne[vf_semne]=='1' or stiva_semne[vf_semne]=='2'))
{
if(stiva_semne[vf_semne]=='1')
{
stiva_nr[vf_nr]=1-stiva_nr[vf_nr];
vf_semne--;
continue;
}
vf_nr--;
if(stiva_semne[vf_semne]=='2')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]&&stiva_nr[vf_nr+1]);
vf_semne--;
}
poz+=3;
stiva_semne[++vf_semne]='2';
continue;
}
if(s[poz]=='O' and s[poz+1]=='R')
{
while(vf_semne and stiva_semne[vf_semne]!='(')
{
if(stiva_semne[vf_semne]=='1')
{
stiva_nr[vf_nr]=1-stiva_nr[vf_nr];
vf_semne--;
continue;
}
vf_nr--;
if(stiva_semne[vf_semne]=='2')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]&&stiva_nr[vf_nr+1]);
if(stiva_semne[vf_semne]=='3')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]||stiva_nr[vf_nr+1]);
vf_semne--;
}
poz+=2;
stiva_semne[++vf_semne]='3';
}
}
while(vf_semne)
{
if(stiva_semne[vf_semne]=='1')
{
stiva_nr[vf_nr]=1-stiva_nr[vf_nr];
vf_semne--;
continue;
}
vf_nr--;
if(stiva_semne[vf_semne]=='2')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]&&stiva_nr[vf_nr+1]);
if(stiva_semne[vf_semne]=='3')
stiva_nr[vf_nr]=(stiva_nr[vf_nr]||stiva_nr[vf_nr+1]);
vf_semne--;
}
return stiva_nr[1];
}
/**
1 = NOT
2 = AND
3 = OR
**/
int main()
{
fin.getline(s,nmax+5);
n=strlen(s);
fin>>m;
fin.get();
for(int i=1;i<=m;i++)
{
ch=fin.get();
value[ch-'A']=1-value[ch-'A'];
fout<<evaluare();
}
return 0;
}