Pagini recente » Cod sursa (job #2123106) | Cod sursa (job #2039808) | Cod sursa (job #373153) | Cod sursa (job #2720279) | Cod sursa (job #2473612)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char x[1001], buff[1010];
int i, lg;
bool v[128];
bool var();
bool si();
bool sau();
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]];
else if (x[i] == '0')
r = 0;
else
r = 1;
i++;
}
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 | si();
}
return r;
}
int main()
{
int n, k;
char y[101];
fin.getline(buff, sizeof(buff));
for (i = 0; i<strlen(buff);i++)
{
if (isalpha(buff[i]) == 0)
{
if (buff[i] != ' ')
{
x[lg] = buff[i];
lg++;
}
}
else
{
//fout << i << ' ';
if (buff[i] == 'A' && buff[i+1] == 'N')
{
x[lg] = '&';
i= i+2;
}
else if (buff[i] == 'O' && buff[i+1] == 'R')
{
x[lg] = '|';
i++;
}
else if (buff[i] == 'N' && buff[i+1] == 'O')
{
x[lg] = '!';
i= i+2;
}
else if (buff[i] == 'F' && buff[i+1] == 'A')
{
x[lg] = '0';
i= i+4;
}
else if (buff[i] == 'T' && buff[i+1] == 'R')
{
x[lg] = '1';
i =i+3;
}
else
x[lg] = buff[i];
lg++;
}
}
//fout << x << '\n';
fin >> n >> y;
for (k = 0; k<n; k++)
{
v[y[k]] = !v[y[k]];
i = 0;
fout << sau();
}
}