Pagini recente » Cod sursa (job #1368956) | Cod sursa (job #1737623) | Cod sursa (job #2120957) | Cod sursa (job #247452) | Cod sursa (job #1024128)
#include <fstream>
#include <cstring>
using namespace std;
int n, ns, St[1010], vf;
char s[1010], modif[110];
bool val[30];
inline bool Eval()
{
int i = 0;
bool var;
vf = 0;
while(i < ns)
{
if(s[i] == ' ')
{
i++;
continue;
}
if(s[i] == '(')
{
St[++vf] = -1;
i++;
continue;
}
if(i + 3 < ns && s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E')
{
St[++vf] = 1;
i += 4;
continue;
}
if(i + 4 < ns && s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E')
{
St[++vf] = 0;
i += 5;
continue;
}
if(i + 2 < ns && s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D')
{
St[++vf] = -2;
i += 3;
continue;
}
if(i + 1 < ns && s[i] == 'O' && s[i + 1] == 'R')
{
St[++vf] = -3;
i += 2;
continue;
}
if(i + 2 < ns && s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T')
{
St[++vf] = -4;
i += 3;
continue;
}
if('A' <= s[i] && s[i] <= 'Z')
{
var = val[s[i] - 'A'];
if(vf && St[vf] == -4)
{
var = !var;
vf--;
}
if(vf && St[vf] == -2)
{
vf--;
if(St[vf] == 1)
var = (var & true);
else
var = (var & false);
vf--;
}
St[++vf] = var;
i++;
continue;
}
if(s[i] == ')')
{
if(St[vf] == -1)
vf--;
else
{
if(St[vf] == 1)
var = true;
else
var = false;
vf--;
while(St[vf] != -1)
{
if(St[vf] == 1)
var = (var | true);
else
var = (var | false);
vf--;
}
vf--;
}
if(vf && St[vf] == -4)
{
var = !var;
vf--;
}
if(vf && St[vf] == -2)
{
vf--;
if(St[vf] == 1)
var = (var & true);
else
var = (var & false);
vf--;
}
St[++vf] = var;
i++;
continue;
}
}
if(St[vf] == 1)
var = true;
else
var = false;
vf--;
while(vf)
{
if(St[vf] == 1)
var = (var | true);
else
var = (var | false);
vf--;
}
return var;
}
int main()
{
int i;
ifstream fin("bool.in");
fin.getline(s,1010); ns = strlen(s);
fin >> n;
fin >> modif;
fin.close();
ofstream fout("bool.out");
for(i = 0; i < n; ++i)
{
val[modif[i] - 'A'] = !val[modif[i] - 'A'];
fout << Eval();
}
fout << "\n";
fout.close();
return 0;
}