Pagini recente » Cod sursa (job #562516) | Cod sursa (job #696786) | Cod sursa (job #2546406) | Cod sursa (job #3258601) | Cod sursa (job #1455907)
#include <fstream>
#include <cstring>
using namespace std;
char initExpr[1001];
char changes[101];
char expr[1001];
bool values[30];
void modifyExpression()
{
int l = strlen(initExpr);
int i = 0;
int j = 0;
while(i < l)
{
if(initExpr[i] == ' ')
{
i++;
continue;
}
else if(initExpr[i] == 'N')
{
if((i + 1 < l) && initExpr[i + 1] == 'O')
{
expr[j] = '!';
i += 2;
}
else
expr[j] = 'N';
}
else if(initExpr[i] == 'A')
{
if((i + 1 < l) && initExpr[i + 1] == 'N')
{
expr[j] = '&';
i += 2;
}
else
expr[j] = 'A';
}
else if(initExpr[i] == 'O')
{
if((i + 1 < l) && initExpr[i + 1] == 'R')
{
expr[j] = '|';
i += 1;
}
else
expr[j] = 'O';
}
else if(initExpr[i] == 'T')
{
if((i + 1 < l) && initExpr[i + 1] == 'R')
{
expr[j] = '1';
i += 3;
}
else
expr[j] = 'T';
}
else if(initExpr[i] == 'F')
{
if((i + 1 < l) && initExpr[i + 1] == 'A')
{
expr[j] = '0';
i += 4;
}
else
expr[j] = 'F';
}
else
expr[j] = initExpr[i];
i++;
j++;
}
}
bool evaluate(int & i)
{
bool value = 0;
bool t = 1;
int l = strlen(expr);
bool notActive = 0;
bool temp;
for(; i < l; i++)
{
if(expr[i] == '|')
{
value = value || t;
t = 1;
}
else if(expr[i] == '!')
{
notActive = true;
}
else if(expr[i] >= 'A' && expr[i] <= 'Z')
{
if(!notActive)
t = t && values[expr[i] - 'A'];
else
{
t = t && (!values[expr[i] - 'A']);
notActive = 0;
}
}
else if(expr[i] == '0')
t = false;
else if(expr[i] == '(')
{
i++;
if(!notActive)
{
temp = evaluate(i);
t = t && temp;
}
else
{
temp = evaluate(i);
t = t && (!temp);
notActive = 0;
}
}
else if(expr[i] == ')')
break;
}
value = value || t;
return value;
}
int main()
{
int i;
int n;
int j;
ifstream f("bool.in");
f.getline(initExpr, 1000);
f >> n;
f >> changes;
f.close();
modifyExpression();
ofstream g("bool.out");
for(i = 0; i < n; i++)
{
values[changes[i] - 'A'] = !values[changes[i] - 'A'];
j = 0;
g << evaluate(j);
}
g << '\n';
g.close();
return 0;
}