Pagini recente » Cod sursa (job #3168386) | Cod sursa (job #2385552) | Cod sursa (job #1689197) | Cod sursa (job #3142920) | Cod sursa (job #2428658)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char s[1003];
bool v[27];
int jump(int indice)
{
int nr_ec_in_rama=0;
for (int i=indice+1;true;i++)
{
if (s[i]=='(')
nr_ec_in_rama++;
if (s[i]==')')
nr_ec_in_rama--;
if (nr_ec_in_rama<0)
return i;
}
}
void influentare(bool &raspuns,bool informatie,bool cerinta,bool &negare)
{
if (negare==1)
{
negare=0;
if (cerinta==0)
raspuns=raspuns||!informatie;
else
raspuns=raspuns&&!informatie;
return;
}
if (cerinta==0)
raspuns=raspuns||informatie;
else
raspuns=raspuns&&informatie;
return;
}
bool ecuatie(int indice)
{
bool raspuns=false;
bool cerinta=false; // false - || , true - &&
bool negare=false;
int nr_ec_in_rama=0;
int i=indice;
while (nr_ec_in_rama>=0)
{
if (s[i]<='Z'&&s[i]>='A'&&(s[i+1]>'Z'||s[i+1]<'A')) // e o variabila
{
influentare(raspuns,v[s[i]-'A'],cerinta,negare);
}
else
if (s[i]=='(')
{
bool c=ecuatie(i+1);
influentare(raspuns,c,cerinta,negare);
i=jump(i);
}else
if (s[i]==')')
nr_ec_in_rama--;
if (s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
cerinta=true;
i+=2;
}else
if (s[i]=='O'&&s[i+1]=='R')
{
cerinta=false;
i+=1;
}else
if (s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
i+=2;
negare=1;
}else
if (s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S')
{
influentare(raspuns,false,cerinta,negare);
i+=4;
}else
if (s[i]=='T'&&s[i+1]=='R')
{
influentare(raspuns,true,cerinta,negare);
i+=3;
}
i++;
}
return raspuns;
}
int main()
{
fin.getline(s,1001);
int l=strlen(s);
s[l]=')';
s[l+1]=NULL;
int n;
//cout << s << "\n";
fin >> n;
for (int i=1;i<=n;i++)
{
char x;
fin >> x;
v[x-'A']=!v[x-'A'];
fout << ecuatie(0);
}
return 0;
}