Pagini recente » Cod sursa (job #2368795) | Cod sursa (job #3004589) | Cod sursa (job #1449226) | Cod sursa (job #1458626) | Cod sursa (job #2842142)
#include <fstream>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int N_MAX = 1000;
const int N = 100;
const int L = 26;
char s[N_MAX + 1], c[N + 1];
int p;
bool valoare[L];
bool expresie();
bool factor();
bool termen();
void transformare();
///A AND ((B OR NOT C) OR ((TRUE)))
///A&((B|!C)|((1)))
///A N D
///i i+1 i+2
///N O T
///i i+1 i+2
///T R U E
///i i+1 i+2 i+3
void transformare()
{
int i = 0, nr = 0;
while(s[i] != '\0')
{
if(s[i] == '0' && s[i + 1] == 'R')
{
s[nr++] = '|';
i += 2;
}
else if(s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T')
{
s[nr++] = '!';
i += 3;
}
else if(s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D')
{
s[nr++] = '&';
i += 3;
}
else if(s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E')
{
s[nr++] = '1';
i += 4;
}
else if(s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E')
{
s[nr++] = '0';
i += 5;
}
else if(s[i] != ' ')
{
s[i++] = s[nr++];
}
else
{
i++;
}
}
s[nr] = '\0';
}
bool expresie()
{
bool sau = termen();
while(s[p] == '|')
{
p++;
sau = (termen() || sau);
}
return sau;
}
bool termen()
{
bool si = factor();
while(s[p] == '&')
{
p++;
si = (factor() && si);
}
return si;
}
bool factor()
{
bool rez, semn = true;
while(s[p] == '!')
{
p++;
semn = (!semn);
}
if (s[p] == '(')
{
p++;
rez = expresie();
p++;
if (semn)
{
return rez;
}
return (!rez);
}
if(s[p++] == '0')
{
rez = false;
}
if(s[p++] == '1')
{
rez = true;
}
rez = valoare[s[p++] - 'A'];
if (!semn)
{
rez = (!rez);
}
return rez;
}
int main()
{
int n;
in.getline(s, N_MAX + 1);
in >> n;
in >> c;
for(int i = 0; i < n; i++)
{
p = 0;
valoare[c[i] - 'A'] = (!valoare[c[i] - 'A']);
out << expresie();
}
in.close();
out.close();
return 0;
}