Pagini recente » Cod sursa (job #2909535) | Cod sursa (job #667822) | Arhiva Educationala | Borderou de evaluare (job #2683610) | Cod sursa (job #3279795)
#include <fstream>
#include <cstring>
#include <iostream>
#include <unordered_map>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int MAX=1000;
char s[MAX+10],v[MAX+10],b;
unordered_map <char,bool> f;
int i,n,k,q;
int expresie();
int termen();
int termen2();
int termen3();
int constanta();
int main()
{
fin.getline(s,1005);
n=strlen(s);
for (i=0; i<n; i++)
{
if (s[i]==' ')
continue;
if (s[i]=='(' || s[i]==')')
{
v[++k]=s[i];
continue;
}
if (s[i]=='T' && s[i+1]=='R')
{
v[++k]='1';
i+=3;
continue;
}
if (s[i]== 'F' && s[i+1] == 'A')
{
v[++k] = '0';
i+=4;
continue;
}
if (s[i] == 'O' && s[i+1] == 'R')
{
v[++k] = '|';
i++;
continue;
}
if (s[i]=='A' && s[i+1] == 'N')
{
v[++k] = '&';
i+=2;
continue;
}
if (s[i] == 'N' && s[i+1] == 'O')
{
v[++k] = '1';
v[++k] = '^';
i+=2;
continue;
}
v[++k] = s[i];
}
n=k;
fin>>q;
while (q)
{
fin>>b;
f[b]=1^f[b];
i=1;
fout<<expresie();
q--;
}
return 0;
}
int termen3()
{
int r;
if (v[i]=='(')
{
i++;
r=expresie();
i++;
}
else
{
if (v[i]=='0')
r=0;
else
if (v[i]=='1')
r=1;
else
r=f[v[i]];
}
return r;
}
int termen2()
{
int r=termen3();
while (v[i]=='^')
{
i++;
r=(r^termen3());
}
return r;
}
int termen()
{
int r=termen2();
while (v[i]=='&')
{
i++;
r=(r&termen2());
}
return r;
}
int expresie()
{
int r=termen();
while (v[i]=='|')
{
i++;
r=(r|termen());
}
return r;
}