Pagini recente » Cod sursa (job #2186939) | Cod sursa (job #2969081) | Cod sursa (job #2146057) | Cod sursa (job #1883520) | Cod sursa (job #275387)
Cod sursa(job #275387)
#include <fstream>
#include <cstring>
using namespace std;
char tmp[2000], ed[2000];
unsigned int i,n;
bool A['z'-'a'+2];
bool ev1();
bool ev2();
int main()
{
ifstream in ("bool.in");
ofstream out("bool.out");
char c;
for (i=0;i<=2000;i++)
{in>>tmp[i]; if (tmp[i]=='\n') break;};
filter();
for (i=0;i<='z'-'a'+1;i++)
A[i]= false;
in>>n;
in>>c;
while (n--)
{
in>>c;
A[c-'A']=!A[c-'A'];
i=0;
out<<(eval()?1:0);
}
return 0;
}
void filter()
{
unsigned int n=0;
for (i=0;i<=tmp[i]!='\n';i++)
if (tmp[i]!=' ') ed[n++]=tmp[i];
}
bool eval()
{
bool mem=ev1();
while ( strncmp(i+ed, "OR", 2)==0)
{
i+=2;
mem |= ev1();
}
return mem;
}
bool ev1()
{
bool mem=ev2();
while (strncmp(i+ed, "AND", 3)==0)
{
i+=3;
mem&=ev2();
}
return mem;
}
bool ev2()
{
bool mem;
if (strncmp(i+ed, "TRUE", 4)==0)
{
i+=4;
return true;
}
if (strncmp(i+ed, "FALSE", 5)==0)
{
i+=5;
return false;
}
if (strncmp (i+ed, "NOT", 3)==0)
{
i+=3;
mem=!ev2();
}
else
{
if (ed[i]=='(')
{
i++;
mem=eval();
i++;
}
else
mem=A[ed[i++]-'A'];
}
return mem;
}