Pagini recente » Cod sursa (job #2833382) | Cod sursa (job #139589) | Cod sursa (job #1793407) | Cod sursa (job #1408167) | Cod sursa (job #2918179)
#include <bits/stdc++.h>
#define nmax 101
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
string in,p,ch;
int n;
void parse()
{
int i=0;
while(i<in.size())
{
string l5=in.substr(i,5);
string l4=in.substr(i,4);
string l3=in.substr(i,3);
string l2=in.substr(i,2);
if(l4=="TRUE")
{
p.push_back('1');
i+=4;
}
else if(l5=="FALSE")
{
p.push_back('0');
i+=5;
}
else if(l3=="AND")
{
p.push_back('&');
i+=3;
}
else if(l3=="NOT")
{
p.push_back('!');
i+=3;
}
else if(l2=="OR")
{
p.push_back('|');
i+=2;
}
else if((in[i]>='A'&&in[i]<='Z')||in[i]=='('||in[i]==')')
{
p.push_back(in[i]);
i++;
}
else
{
i++;
}
//cout<<i<<' '<<p<<' '<<in.size()<<'\n';
}
}
bool evalNot();
bool evalOr();
bool evalAnd();
bool evalVar();
int pt=0;
bool val[27];
bool evalOr()
{
bool a=evalAnd();
if(p[pt]=='|')
{
pt++;
bool b=evalAnd();
return a|b;
}
return a;
}
bool evalAnd()
{
bool a=evalNot();
if(p[pt]=='&')
{
pt++;
bool b=evalNot();
return a&b;
}
return a;
}
bool evalNot()
{
if(p[pt]=='!')
{
pt++;
return !evalVar();
}
return evalVar();
}
bool evalVar()
{
if(p[pt]=='(')
{
pt++;
bool a=evalOr();
pt++; //paranteza inchisa;
return a;
}
if(p[pt]=='1') {pt++;return 1;}
if(p[pt]=='0') {pt++; return 0;}
bool a=val[p[pt]-'A'];
pt++;
return a;
}
int main()
{
getline(f,in);
parse();
//g<<p<<'\n';
f>>n>>ch;
for(int i=0;i<n;i++)
{
val[ch[i]-'A']^=1;
pt=0;
g<<evalOr();
}
return 0;
}