Pagini recente » Cod sursa (job #304142) | Cod sursa (job #2368478) | Cod sursa (job #2945953) | Cod sursa (job #1227174) | Cod sursa (job #1573562)
#include <fstream>
#include <string>
using namespace std;
ifstream fi("bool.in");
ofstream fo("bool.out");
bool expresie();
bool termen();
bool factor();
bool bucata();
string s;
int p;
bool vector[2000];
char aux[2000];
int main()
{
getline(fi, s);
int n, i, k = 0;
n = s.length();
for (i = 0; i < n; i++)
{
if (s[i] == 'A' && s[i + 1] == 'N')
{
aux[k++] = '&';
i += 2;
}
else if (s[i] == 'O' && s[i + 1] == 'R')
{
aux[k++] = '|';
i++;
}
else if (s[i] == 'N' && s[i + 1] == 'O')
{
aux[k++] = '!';
i += 2;
}
else if (s[i] == 'T' && s[i + 1] == 'R')
{
aux[k++] = '1';
i += 3;
}
else if (s[i] == 'F' && s[i + 1] == 'A')
{
aux[k++] = '0';
i += 4;
}
else if (s[i] != ' ')
aux[k++] = s[i];
}
int numar;
fi >> numar;
for (i = 1; i <= numar; i++)
{
char b;
fi >> b;
p = 0;
vector[b - 'A'] = !vector[b - 'A'];
fo << expresie();
}
return 0;
}
bool expresie()
{
bool r2, r = termen();
while (aux[p] == '|')
{
p++;
r2 = termen();
r = (r || r2);
}
return r;
}
bool termen()
{
bool r2, r = factor();
while (aux[p] == '&')
{
p++;
r2 = factor();
r = (r&&r2);
}
return r;
}
bool factor() {
bool rasp = 0;
if (aux[p] >= 'A' && aux[p] <= 'Z') {
return vector[aux[p++] - 'A'];
}
else if (aux[p] == '0') {
p++;
return 0;
}
else if (aux[p] == '1') {
p++;
return 1;
}
else if (aux[p] == '(') {
p++;
rasp = expresie();
p++;
}
else if (aux[p] == '!') {
p++;
return !factor();
}
return rasp;
}