Pagini recente » Cod sursa (job #1453412) | Cod sursa (job #2920730) | Lot 2017 Baraj 3 Clasament | Cod sursa (job #1673595) | Cod sursa (job #2428648)
#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]==' ') // e o variabila
{
influentare(raspuns,v[s[i]-'A'],cerinta,negare);
}
if (s[i]=='(')
{
nr_ec_in_rama++;
bool c=ecuatie(i+1);
influentare(raspuns,c,cerinta,negare);
i=jump(i);
}
if (s[i]==')')
nr_ec_in_rama--;
if (s[i]=='A'&&s[i+1]=='N')
{
cerinta=true;
i+=2;
}
if (s[i]=='O'&&s[i+1]=='R')
{
cerinta=false;
i+=1;
}
if (s[i]=='N'&&s[i+1]=='O')
{
i+=2;
negare=1;
}
if (s[i]=='F'&&s[i+1]=='A')
{
influentare(raspuns,false,cerinta,negare);
i+=4;
}
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;
}