Pagini recente » Cod sursa (job #389571) | Cod sursa (job #2318795) | Cod sursa (job #2333424) | Cod sursa (job #3339440) | Cod sursa (job #3337606)
#include <fstream>
#include <cstring>
using namespace std;
const int NS = 1000;
const int NOP = 100;
const int NL = 26;
char aux[NS+1], s[NS+1], op[NOP];
bool val_var[NL];
int p;
void transforma(char dest[], char sursa[])
{
int i = 0, nd = 0;
while (sursa[i] != '\0')
{
if (sursa[i] == ' ')
{
i++;
}
else if (sursa[i] == 'T' && sursa[i+1] == 'R') ///TRUE
{
dest[nd++] = '1';
i += 4;
}
else if (sursa[i] == 'F' && sursa[i+1] == 'A') ///FALSE
{
dest[nd++] = '0';
i += 5;
}
else if (sursa[i] == 'N' && sursa[i+1] == 'O') ///NOT
{
dest[nd++] = '!';
i += 3;
}
else if (sursa[i] == 'A' && sursa[i+1] == 'N') ///AND
{
dest[nd++] = '&';
i += 3;
}
else if (sursa[i] == 'O' && sursa[i+1] == 'R') ///OR
{
dest[nd++] = '|';
i += 3;
}
else
{
dest[nd++] = sursa[i++];
}
}
}
bool expresie();
bool termen();
bool factor();
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(aux, NS + 1);
transforma(s, aux);
int n;
in >> n >> op;
for (int i = 0; i < n; i++)
{
int poz_alfa = op[i] - 'A';
val_var[poz_alfa] = !val_var[poz_alfa];
p = 0;
out << expresie();
}
out << "\n";
in.close();
out.close();
return 0;
}
bool expresie()
{
bool exp_or = termen();
while (s[p] == '|')
{
p++;
exp_or = (termen() || exp_or);
}
return exp_or;
}
bool termen()
{
bool exp_and = factor();
while (s[p] == '&')
{
p++;
exp_and = (factor() && exp_and);
}
return exp_and;
}
bool factor()
{
bool exp_, semn = true;
while (s[p] == '!')
{
semn = (!semn);
p++;
}
if (s[p] == '(')
{
p++;
exp_ = expresie();
p++;
if (!semn)
{
exp_ = (!exp_);
}
return exp_;
}
int poz_alfa = s[p++] - 'A';
exp_ = val_var[poz_alfa];
if (!semn)
{
exp_ = (!exp_);
}
return exp_;
}