Pagini recente » Cod sursa (job #2851025) | Cod sursa (job #1013869) | Cod sursa (job #1368845) | Cod sursa (job #2056717) | Cod sursa (job #2851031)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
char t[1005], s[1005], *p, c;
bool val[30];
int k, n;
bool eval();
bool termen();
bool factor();
void citire()
{
f.getline(t, 1005);
f >> n;
f.get();
}
void descifrare()
{
p = t;
strtok(t, " ");
while(p)
{
if (strcmp(p, "AND") == 0) strcat(s, "&");
else if(strcmp(p, "OR") == 0) strcat(s, "|");
else if(strcmp(p, "NOT") == 0) strcat(s, "!");
else if(strstr(p, "TRUE") != 0)
{
char *m = strstr(p, "TRUE");
strncat(s, p, m-p);
strcat(s, "1");
strcat(s, m+4);
}
else if(strstr(p, "FALSE") != 0)
{
char *m = strstr(p, "FALSE");
strncat(s, p, m-p);
strcat(s, "0");
strcat(s, m+5);
}
else strcat(s, p);
p = strtok(NULL, " ");
}
}
bool eval()
{
bool r;
r = termen();
while (*p == '|')
{
++p;
r |= termen();
}
return r;
}
bool termen()
{
bool r;
r = factor();
while (*p == '&')
{
++p;
r &= factor();
}
return r;
}
bool factor()
{
bool r = 0;
if (*p == '!')
{
++p;
r =! factor();
}
else if (*p == '(')
{
++p;
r = eval();
++p;
}
else if (isalpha(*p))
{
r = val[*p-'A'];
++p;
}
else if (*p == '1')
{
++p;
r = true;
}
else if (*p == '0')
{
++p;
r = false;
}
return r;
}
int main()
{
citire();
descifrare();
for (int i = 0; i < n; ++i)
{
p = s;
f >> c;
val[c-'A'] = !val[c-'A'];
g << eval();
}
return 0;
}