Pagini recente » Cod sursa (job #2216132) | Cod sursa (job #3259487) | Cod sursa (job #1163724) | Cod sursa (job #3279225) | Cod sursa (job #2849965)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("ruf.in");
ofstream g ("ruf.out");
char t[1005], litere[30], s[1005], *p;
bool val[30];
int k, n;
bool eval();
bool termen();
bool factor();
void citire()
{
f.getline(t, 1005);
f >> n;
f.get();
f.getline(litere, 30);
}
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+6);
}
else if(strstr(p, "(FALSE)") != 0)
{
char *m = strstr(p, "(FALSE)");
strncat(s, p, m-p);
strcat(s, "0");
strcat(s, m+7);
}
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;
if (*p == '!')
{
++p;
r=!factor();
}
else if (*p == '(')
{
++p;
r = eval();
++p;
}
else if (*p== '1'){
++p;
r=true;
}
else if (*p== '0'){
++p;
r=false;
}
else if (isalpha(*p))
{
r = val[litere[*p - 'A'] - 'A'];
++p;
}
return r;
}
int main()
{
citire();
descifrare();
for (int i = 0; i < n; ++i)
{
p = s;
if (val[litere[i]-'A'] == 0)
{
val[litere[i]-'A'] = 1;
}
else val[litere[i]-'A'] = 0;
g << eval();
}
return 0;
}