Pagini recente » Cod sursa (job #1401064) | Cod sursa (job #164544) | Profil IulianOleniuc | Cod sursa (job #1595740) | Cod sursa (job #3281040)
#include <fstream>
using namespace std;
const int NS = 1000;
const int NT = 100;
const int NL = 26;
char s[NS+1], t[NT+1];
bool val_ad[NL];
int p;
bool expresie();
bool termen();
bool factor();
bool este_litera(char c)
{
return ('A' <= c && c <= 'Z');
}
void transforma(char s[])
{
int i = 0, n_ramase = 0;
while (s[i] != '\0')
{
if (este_litera(s[i]))
{
if (s[i] == 'A' && s[i+1] == 'N')
{
s[n_ramase++] = '&';
i += 3;
}
else if (s[i] == 'O' && s[i+1] == 'R')
{
s[n_ramase++] = '|';
i += 2;
}
else if (s[i] == 'N' && s[i+1] == 'O')
{
s[n_ramase++] = '!';
i += 3;
}
else if (s[i] == 'T' && s[i+1] == 'R')
{
s[n_ramase++] = '1';
i += 4;
}
else if (s[i] == 'F' && s[i+1] == 'A')
{
s[n_ramase++] = '0';
i += 5;
}
else///s[i] este o variabila
{
s[n_ramase++] = s[i];
i += 1;
}
}
else if (s[i] == '(' || s[i] == ')')
{
s[n_ramase++] = s[i];
i += 1;
}
else///s[i] este un spatiu
{
i += 1;///nu scriem nimic
}
}
s[n_ramase] = '\0';
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(s, NS + 1);
transforma(s);
//out << s << "\n";
int n;
in >> n >> t;
for (int i = 0; i < n; i++)
{
val_ad[t[i]-'A'] = (!val_ad[t[i]-'A']);
p = 0;
out << expresie();
}
out << "\n";
in.close();
out.close();
return 0;
}
bool expresie()
{
bool val = termen();
while (s[p] == '|')
{
p++;
val = termen() or val;
}
return val;
}
bool termen()
{
bool val = factor();
while (s[p] == '&')
{
p++;
val = factor() and val;
}
return val;
}
bool factor()
{
bool negatie = false;
while (s[p] == '!')
{
negatie = (!negatie);
p++;
}
if (s[p] == '(')
{
p++;
bool val = expresie();
p++;
if (negatie)
{
val = (!val);
}
return val;
}
bool val;
if (este_litera(s[p]))
{
val = val_ad[s[p]-'A'];
}
else if (s[p] == '1')
{
val = true;
}
else///s[p] == '0'
{
val = false;
}
p++;
if (negatie)
{
val = (!val);
}
return val;
}