Pagini recente » Cod sursa (job #1715301) | Cod sursa (job #1003360) | Cod sursa (job #1806220) | Cod sursa (job #1789875) | Cod sursa (job #2836949)
#include <fstream>
using namespace std;
const int L = 1e3;
const int N = 1e2;
const int NL = 26;
char s[L+1], schimb[N+1];
int p;
bool val[NL];
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool sau = termen();
while (s[p] == '|')
{
p++;
bool t = termen();
sau = (sau || t);
}
return sau;
}
bool termen()
{
bool shi = factor();
while (s[p] == '&')
{
p++;
bool f = factor();
shi = (shi && f);
}
return shi;
}
bool factor()
{
bool rez, semn = true;
while (s[p] == '!')
{
p++;
semn = (!semn);
}
if (s[p] == '(')
{
p++;
rez = expresie();
p++;
if (!semn)
{
rez = (!rez);
}
return rez;
}
if (s[p] == '0')
{
rez = false;
}
else if (s[p] == '1')
{
rez = true;
}
else
{
rez = val[s[p]-'A'];
}
if (!semn)
{
rez = (!rez);
}
return rez;
}
void transforma()
{
int i = 0, m = 0;
while (s[i] != '\0')
{
if (s[i] == 'T' && s[i+1] == 'R')
{
s[m++] = '1';
i += 4;
}
else if (s[i] == 'F' && s[i+1] == 'A')
{
s[m++] = '0';
i += 5;
}
else if (s[i] == 'N' && s[i+1] == 'O')
{
s[m++] = '!';
i += 3;
}
else if (s[i] == 'A' && s[i+1] == 'N')
{
s[m++] = '&';
i += 3;
}
else if (s[i] == 'O' && s[i+1] == 'R')
{
s[m++] = '|';
i += 2;
}
else if ('A' <= s[i] && s[i] <= 'Z')
{
s[m++] = s[i++];
}
else if(s[i] == '(' || s[i] == ')')
{
s[m++] = s[i++];
}
else///daca e spatiu
{
i++;
}
}
s[m] = '\0';
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
int n;
in.getline(s, L+1);
in >> n;
in >> schimb;
transforma();
for (int i = 0; i < n; i++)
{
val[schimb[i]-'A'] = (!val[schimb[i]-'A']);
p = 0;
out << expresie();
}
return 0;
}