Pagini recente » Cod sursa (job #394858) | Cod sursa (job #383658) | Cod sursa (job #451847) | Cod sursa (job #141028) | Cod sursa (job #2846499)
#include <fstream>
#include <cstring>
using namespace std;
const int D = 1001 , N = 100;
char sir[D] , modif[N] , aux[D];
int num , k , poz;
bool ok[N];
void transform()
{
int dim = strlen(aux);
for (int i = 0 ; i < dim ; i ++)
{
if (strchr("()" , aux[i]) == NULL)
{
if ((i == 0 || strchr(" ()" , aux[i - 1]) != NULL)
&& (i == dim - 1 || strchr(" ()" , aux[i + 1]) != NULL))
{
sir[k ++] = aux[i];
}
else
{
if (strncmp(aux + i , "TRUE" , 4) == 0)
{
sir[k ++] = '1';
i += 3;
}
else if (strncmp(aux + i , "FALSE" , 5) == 0)
{
sir[k ++] = '0';
i += 4;
}
else if (strncmp(aux + i , "AND" , 3) == 0)
{
sir[k ++] = '&';
i += 2;
}
else if (strncmp(aux + i , "OR" , 2) == 0)
{
sir[k ++] = '|';
i ++;
}
else if (strncmp(aux + i , "NOT" , 3) == 0)
{
sir[k ++] = '!';
i += 2;
}
}
}
else
{
sir[k ++] = aux[i];
}
}
}
bool expresie();
bool factor();
bool expresie()
{
bool expr = factor();
while (sir[poz] == '|' || sir[poz] == '&')
{
if (sir[poz] == '|')
{
poz ++;
if (sir[poz] == '1')
expr = true || factor();
else if (sir[poz] == '0')
expr = false || factor();
else if (ok[sir[poz] - 'A'])
expr = true || factor();
else
expr = false || factor();
}
else
{
poz ++;
if (sir[poz] == '1')
expr = true && factor();
else if (sir[poz] == '0')
expr = false && factor();
else if (ok[sir[poz] - 'A'])
expr = true && factor();
else
expr = false && factor();
}
}
return expr;
}
bool factor()
{
bool semn = true;
while (sir[poz] == '!')
{
poz ++;
if (semn)
semn = false;
else
semn = true;
}
while (sir[poz] == '(')
{
poz ++;
bool expr = expresie();
poz ++;
return semn && expr;
}
return semn && ok[sir[poz] - 'A'];
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(aux , D);
in >> ws >> num >> ws;
in.getline(modif , N);
in.close();
transform();
for (int i = 0 ; i < num ; i ++)
{
if (ok[modif[i] - 'A'])
{
ok[modif[i] - 'A'] = false;
}
else
{
ok[modif[i] - 'A'] = true;
}
bool rez = expresie();
if (rez)
out << 1;
else
out << 0;
}
return 0;
}