Pagini recente » Cod sursa (job #2049131) | Cod sursa (job #1127280) | Cod sursa (job #2398916) | Cod sursa (job #407494) | Cod sursa (job #794241)
Cod sursa(job #794241)
#include <cstdio>
#include <iostream>
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), c, *c_ptr(&c);
while (c != '\n')
{
std::scanf("%c",c_ptr);
if (c != ' ')
{
*iterator = c;
++iterator;
}
}
iterator = '\0';
int x;
std::scanf("%d\n%s",&x,modify);
std::cerr << expression << '\n';
std::cerr << modify << '\n';
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;
}