Pagini recente » Cod sursa (job #2845937) | Cod sursa (job #2101830) | Cod sursa (job #2298346) | Cod sursa (job #642112) | Cod sursa (job #2843323)
#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 val[N];
int expresie();
int termen();
int factor();
int expresie()
{
int expr = termen();
while (aux[poz] == '|')
{
poz ++;
expr = expr | termen();
}
return expr;
}
int termen()
{
int eval = factor();
while (aux[poz] == '&')
{
poz ++;
eval = eval & termen();
}
return eval;
}
int factor()
{
int val = 0;
while (aux[poz] == '!')
{
poz ++;
if (val == 0)
val = 1;
else
val = 0;
}
if (aux[poz] == '(')
{
poz ++;
val = expresie();
poz ++;
return val;
}
return val;
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(aux , D);
in >> ws >> num >> ws;
in.getline(modif , N);
in.close();
int dim = strlen(aux);
for (int i = 0 ; i < dim ; i ++)//rescriere expresie
{
if (strchr("()" , aux[i]) == NULL)
{
int prim , ult;
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];
}
}
strcpy(aux , sir);
aux[k] = '\0';
for (int i = 0 ; i < num ; i ++)
{
for (int j = 0 ; j < k ; j ++)
{
if ('A' <= aux[j] && aux[j] <= 'Z')
{
if (aux[j] == modif[i])
{
if (!val[i])
{
aux[j] = '1';
val[i] = true;
}
else
{
aux[j] = '0';
val[i] = false;
}
}
else
{
if (!val[i])
{
aux[j] = '0';
}
else
{
aux[j] = '1';
}
}
}
}
//out << aux << ' ';
out << expresie();
}
return 0;
}