Pagini recente » Cod sursa (job #2867554) | Cod sursa (job #597451) | Cod sursa (job #2183970) | Cod sursa (job #527902) | Cod sursa (job #2473596)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
//NOT > AND > OR
bool v[128];
char x[1005];
int i, lg;
bool sau();
bool si();
bool var();
bool var()
{
bool r;
if (x[i] == '(')
{
i++;
r = sau();
i++;
}
else if (x[i] == '!')
{
bool sch = 0;
while (x[i] == '!')
{
i++;
sch = !sch;
}
r = var();
if (sch == 1)
r = !r;
}
else if (isalpha(x[i]))
{
r = v[x[i]];
//fout << r << x[i];
i++;
}
else if (x[i] == '0')
r = 0;
else
r = 1;
return r;
}
bool si()
{
bool r = var();
while (i<lg && x[i] == '&')
{
i++;
r = r & var();
}
return r;
}
bool sau()
{
bool r = si();
while (i<lg && x[i] == '|')
{
i++;
r = r | var();
}
return r;
}
int main()
{
int n, k;
char c[101], buff[1010] = {};
fin.getline(buff, sizeof(buff));
fin >> n >> c;
for (i = 0; i<strlen(buff); i++)
{
if (isalpha(buff[i]))
{
if (buff[i+1] == 'N')
{
//AND
x[lg++] = '&';
i = i+2;
}
else if (buff[i+1] == 'R')
{
if (buff[i+2] == 'U')
{
x[lg++] = '1';
i=i+3;
}
else
{
x[lg++] = '|';
i++;
}
}
else if (buff[i+1] == 'O')
{
//NOT
x[lg++] = '!';
i = i+2;
}
else if (buff[i+1] == 'A')
{
x[lg++] = '0';
i = i+4;
}
else
x[lg++] = buff[i];
}
else if (buff[i] != ' ')
x[lg++] = buff[i];
}
for (k = 0; k<n; k++)
{
v[c[k]] = !v[c[k]];
i = 0;
fout << sau();
}
return 0;
}