Pagini recente » Cod sursa (job #2667430) | Cod sursa (job #1818464)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int N = 1001;
char s[N],aux[N],op[101];
bool v[26];
int p;
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool val = termen();
while(aux[p] == '|')
{
p++;
val = (val || termen);
}
return val;
}
bool termen()
{
bool val2 = factor();
while(aux[p] == '&')
{
p++;
val2 = (val2 && factor);
}
return val2;
}
bool factor()
{
bool semn = true,val3;
while(aux[p] == '!')
{
p++;
semn = (!semn);
}
if(s[p] == '(')
{
p++;
val3 = expresie();
p++;
if(semn)
return val3;
else
return !val3;
}
val3 = v[aux[p] - 'A'];
p++;
if(semn)
return val3;
return !val3;
}
int main()
{
int n, x, j = 0;
in.getline(s,1000);
n = strlen(s);
in>>x>>ws;
in.getline(op,101);
for(int i = 0; i <= n; i++)
{
if(s[i] == ' ')
continue;
else if(s[i] == 'A'&& s[i+1] == 'N')
{
aux[j++] = '&';
i+=2;
}
else if(s[i] == 'O'&& s[i+1] == 'R')
{
aux[j++] = '|';
i++;
}
else if(s[i] == 'N'&& s[i+1] == 'O')
{
aux[j++] = '!';
i+=2;
}
else if(s[i] == 'T' && s[i+1] == 'R')
{
aux[j++] = '1';
i+=3;
}
else if(s[i] == 'F'&& s[i+1] == 'A')
{
aux[j++] = '0';
i+=4;
}
else if(s[i] == '(')
aux[j++] = '(';
else if(s[i] == ')')
aux[j++] = ')';
else
aux[j++] = s[i];
}
aux[j++] = '\0';
//out << aux << "\n";
for(int i = 0; i < x; i++)
{
p = 0;
v[op[i] - 'A'] = (!v[op[i] - 'A']);
out<<expresie();
}
return 0;
}