Pagini recente » Cod sursa (job #1941761) | Cod sursa (job #3196237) | Cod sursa (job #2714193) | Cod sursa (job #2975671) | Cod sursa (job #3198491)
#include<bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
map<char,bool>truth_value;
bool expresie(const string& s,int& p);
bool termen(const string& s,int& p);
bool factor(const string& s,int& p);
bool variabila(const string& s,int& p);
bool expresie(const string& s,int& p)
{
bool result=termen(s,p);
while(p+1<(int)s.size() && s[p]=='O' && s[p+1]=='R')
{
p+=2;
result=result|termen(s,p);
}
return result;
}
bool termen(const string& s,int& p)
{
bool result=factor(s,p);
while(p+2<(int)s.size() && s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
{
p+=3;
result=result&factor(s,p);
}
return result;
}
bool factor(const string& s,int& p)
{
if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
{
p+=3;
return 1^expresie(s,p);
}
else if(s[p]=='(')
{
p++;
bool result=expresie(s,p);
p++;
return result;
}
else
return variabila(s,p);
}
bool variabila(const string& s,int& p)
{
if(s[p]=='T' && s[p+1]=='R')///enough to check for TRUE
{
p+=4;
return 1;
}
else if(s[p]=='F' && s[p+1]=='A')///enough to check for FALSE
{
p+=5;
return 0;
}
else
{
p++;
return truth_value[s[p-1]];
}
}
int main()
{
int n,p;
string init,s,c;
getline(f,init);
f>>n>>c;
for(int i=0; i<(int)init.size(); i++)
if(init[i]!=' ')
s+=init[i];
for(int i=0; i<n; i++)
{
p=0;
truth_value[c[i]]=1^truth_value[c[i]];
g<<expresie(s,p);
}
return 0;
}