Pagini recente » Cod sursa (job #1896484) | Cod sursa (job #2740369) | Cod sursa (job #1917762) | Cod sursa (job #1323456) | Cod sursa (job #2453741)
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
bool v[91];
char x[1001];
int i, lg;
//not > and > or
bool var(); //NOT este operator unar si il includem in var()
bool si();
bool sau();
bool var()
{
bool r;
bool inv = 0;
if (x[i] == '!')
{
inv = 1;
i++;
}
if (x[i] == '(')
{
i++; //sar peste '('
r = sau();
i++; //sar peste ')'
}
else
{
if (x[i] == '0')
r = 0;
else if (x[i] == '1')
r = 1;
else
r = v[x[i]];
i++;
}
if (inv == 1)
return (!r);
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()
{
string buff;
getline(fin, buff);
int lgb = buff.size();
for (i = 0; i<lgb; i++)
{
if (buff[i] == 'A')
{
if (i<lgb && buff[i+1] == 'N')
{
x[lg] = '&';
lg++;
i = i+2;
}
else
{
x[lg] = 'A';
lg++;
}
}
else if (buff[i] == 'O')
{
if (i<lgb && buff[i+1] == 'R')
{
x[lg] = '|';
lg++;
i++;
}
else
{
x[lg] = 'O';
lg++;
}
}
else if (buff[i] == 'N')
{
if (i<lgb && buff[i+1] == 'O')
{
x[lg] = '!';
lg++;
i=i+2;
}
else
{
x[lg] = 'N';
lg++;
}
}
else if (buff[i] == 'T')
{
if (i<lgb && buff[i+1] == 'R')
{
x[lg] = '1';
lg++;
i = i+3;
}
else
{
x[lg] = 'T';
lg++;
}
}
else if (buff[i] == 'F')
{
if (i < lgb && buff[i+1] == 'A')
{
x[lg] = '0';
lg++;
i = i+4;
}
else
{
x[lg] = 'F';
lg++;
}
}
else if (buff[i] != ' ')
{
x[lg] = buff[i];
lg++;
}
}
int n, k;
char sch;
fin >> n;
fin.get();
for (k = 1; k<=n; k++)
{
fin.get(sch);
v[sch] = !v[sch];
i = 0;
fout << sau();
}
return 0;
}