Pagini recente » Cod sursa (job #1571186) | Cod sursa (job #2184726) | Cod sursa (job #454119) | Cod sursa (job #479424) | Cod sursa (job #2844834)
#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 termen();
bool factor();
bool expresie()
{
bool expr = termen();
while (sir[poz] == '|')
{
poz ++;
if (sir[poz] == '1' || sir[poz] == '0')
{
if (sir[poz] == '1')
expr = expr || true;
else
expr = expr || false;
}
else
{
if (ok[sir[poz] - 'A'])
expr = expr || true;
else
expr = expr || false;
}
}
return expr;
}
bool termen()
{
bool expr = factor();
while (sir[poz] == '&')
{
poz ++;
if (sir[poz] == '1' || sir[poz] == '0')
{
if (sir[poz] == '1')
expr = expr && true;
else
expr = expr && false;
}
else
{
if (ok[sir[poz] - 'A'])
expr = expr && true;
else
expr = expr && false;
}
}
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;
}