Pagini recente » Cod sursa (job #1580188) | Cod sursa (job #813937) | Cod sursa (job #487747) | Cod sursa (job #784975) | Cod sursa (job #2959860)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 100;
const int L = 1000;
const int NL = 26;
char s[L + 1], var[N + 1];
bool val_c[NL];
int p;
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool rez = termen();
while (s[p] == '|')
{
p++;
rez = (termen() || rez);
}
return rez;
}
bool termen()
{
bool rez = factor();
while (s[p] == '&')
{
p++;
rez = (factor() && rez);
}
return rez;
}
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;
}
char c = s[p++];
if (c == '0')
{
rez = false;
}
else if (c == '1')
{
rez = true;
}
else
{
rez = val_c[c - 'A'];
}
if (!semn)
{
rez = (!rez);
}
return rez;
}
void transforma(char s[])
{
int i = 0, n = 0;
while (s[i] != '\0')
{
if (s[i] == 'A' && s[i+1] == 'N')
{
s[n++] = '&';
i += 3;
}
else if (s[i] == 'F' && s[i + 1] == 'A')
{
s[n++] = '0';
i += 5;
}
else if (s[i] == 'N' && s[i + 1] == 'O')
{
s[n++] = '!';
i += 3;
}
else if (s[i] == 'O' && s[i + 1] == 'R')
{
s[n++] = '|';
i += 2;
}
else if (s[i] == 'T' && s[i + 1] == 'R')
{
s[n++] = '1';
i += 4;
}
else if (s[i] != ' ')
{
s[n++] = s[i++];
}
else
{
i++;
}
}
s[n] = '\0';
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(s, L + 1);
transforma(s);
//out << s;
int n;
in >> n >> var;
for (int i = 0; i < n; i++)
{
val_c[var[i] - 'A'] = (!val_c[var[i] - 'A']);
p = 0;
out << expresie();
}
in.close();
out.close();
return 0;
}