Pagini recente » Cod sursa (job #3178449) | Cod sursa (job #1330936) | Cod sursa (job #2043712) | Cod sursa (job #2152601) | Cod sursa (job #794240)
Cod sursa(job #794240)
#include <cstdio>
const int MAX_SIZE(1002);
const int MAX_MODIFY(102);
char expression [MAX_SIZE];
char modify [MAX_MODIFY];
bool values ['Z' + 1];
char *parser;
inline void read (void)
{
std::freopen("bool.in","r",stdin);
char *iterator(expression);
while (*(iterator - 1) != '\n')
{
std::scanf("%c",iterator);
++iterator;
}
*iterator = '\0';
int x;
std::scanf("%d\n%s",&x,modify);
std::fclose(stdin);
}
bool priority1 (void);
bool priority2 (void);
bool priority3 (void);
bool priority1 (void)
{
bool result(priority2());
while (*parser == 'O' && parser[1] == 'R')
{
parser += 2;
result |= priority2();
}
return result;
}
bool priority2 (void)
{
bool result(priority3());
while (*parser == 'A' && parser[1] == 'N')
{
parser += 3;
result &= priority3();
}
return result;
}
bool priority3 (void)
{
bool result;
while (*parser == 'N' && parser[1] == 'O')
{
parser += 3;
result = !priority3();
return result;
}
if (*parser == '(')
{
++parser;
result = priority1();
++parser;
}
else
{
if (*parser == 'T' && parser[1] == 'R')
{
result = true;
parser += 4;
}
else if (*parser == 'F' && parser[1] == 'A')
{
result = false;
parser += 5;
}
else
{
result = values[*parser];
++parser;
}
}
return result;
}
inline void print (void)
{
std::freopen("bool.out","w",stdout);
for (char *iterator(modify) ; *iterator ; ++iterator)
{
values[*iterator] = !values[*iterator];
parser = expression;
if (priority1())
std::putchar('1');
else
std::putchar('0');
}
std::putchar('\n');
std::fclose(stdout);
}
int main (void)
{
read();
print();
return 0;
}