Pagini recente » Cod sursa (job #658874) | Cod sursa (job #2593956) | Cod sursa (job #339770) | Cod sursa (job #2000353) | Cod sursa (job #2708853)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1001];
char sir[1001];
int k = -1, n;
bool val[30];
char c;
int p;
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool rez = termen();
while(sir[p] == '|')
{
p++;
rez = (termen() || rez);
}
return rez;
}
bool termen()
{
bool ans = factor();
while(sir[p] == '&')
{
p++;
ans = (factor() && ans);
}
return ans;
}
bool factor()
{
bool nu = false;
/// daca nu == false inseamna ca am numar par de !
/// daca nu == false return val
/// daca nu == true return !val
while(sir[p] == '!')
{
p++;
nu = (!nu);
}
if(sir[p] == '(')
{
p++;
bool sol = expresie();
p++;
if(nu == false)
return sol;
else
return !sol;
}
if(sir[p] == '1')
{
if(nu == false)
return true;
else
return false;
}
if(sir[p] == '0')
{
if(nu == false)
return false;
else
return true;
}
bool boool;
if(sir[p] >= 'A' && sir[p] <= 'Z')
{
boool = val[sir[p] - 'A'];
p++;
}
if(nu == false)
{
return boool;
}
else
return !boool;
}
void transforma()
{
int i = 0;
while(s[i] != NULL)
{
if(s[i] == '(')
{
sir[++k] = s[i];
i++;
}
if(s[i] == ')')
{
sir[++k] = s[i];
i++;
}
if(s[i] == ' ')
i++;
if(s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
{
i += 4;
sir[++k] = '1';
}
if(s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
{
i += 5;
sir[++k] = '0';
}
if(s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
{
i+=3;
sir[++k] = '&';
}
if(s[i] == 'O' && s[i+1] == 'R')
{
i+=2;
sir[++k] = '|';
}
if(s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
{
i += 3;
sir[++k] = '!';
}
if(s[i] >= 'A' && s[i] <= 'Z')
{
sir[++k] = s[i];
i++;
}
}
sir[++k] = NULL;
}
int main()
{
fin.getline(s,1001);
transforma();
fin >> n;
for(int i = 1; i <= n; i ++)
{
fin >> c;
val[c - 'A'] = (!val[c - 'A']);
p = 0;
fout << expresie();
}
}