Pagini recente » Cod sursa (job #3166344) | Cod sursa (job #1867620) | Cod sursa (job #2860456) | Rating Suciu Cosmin (suciucosmin) | Cod sursa (job #1161746)
#include <fstream>
#include <cstring>
#include <string>
#include <bitset>
using namespace std;
string expr[1005];
bitset<30> frecv;
int unde,poz;
bool termen();
bool factor();
bool eval()
{
bool x=termen();
while(expr[unde]=="OR" && unde<=poz)
{
unde++;
int y=termen();
x|=y;
}
return x;
}
bool termen()
{
bool x=factor();
while(expr[unde]=="AND" && unde<=poz)
{
unde++;
int y=factor();
x&=y;
}
return x;
}
bool factor()
{
bool semn=0;
while(expr[unde]=="NOT")
semn=1-semn,unde++;
if(expr[unde]=="(")
{
unde++;
int y=eval();
unde++;
if(semn)
return 1-y;
return y;
}
if(expr[unde]=="TRUE")
{
unde++;
if(semn)
return 0;
return 1;
}
if(expr[unde]=="FALSE")
{
unde++;
if(semn)
return 1;
return 0;
}
if(semn)
return 1-frecv[expr[unde++][0]-'A'];
return frecv[expr[unde++][0]-'A'];
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
int n,i;
char sir[1005];
cin.get(sir,1005);
n=strlen(sir);
string curent="";
for(i=0;i<n;i++)
{
//cout<<"i="<<i<<endl;
if(sir[i]=='(' || sir[i]==')')
{
//cout<<"aici"<<endl;
if(curent!="")
expr[++poz]=curent;
expr[++poz]=sir[i];
curent="";
}
else if(sir[i]==' ')
{
//cout<<"aici2"<<endl;
if(curent!="")
//{
// cout<<"intru"<<endl;
expr[++poz]=curent;
//}
//cout<<"trecut"<<endl;
curent="";
}
else
{
//cout<<"aici3"<<endl;
curent+=sir[i];
}
}
cout<<"aici"<<endl;
if(curent!="")
expr[++poz]=curent;
int cate;
cin>>cate;
char schimb[105];
cin.get();
cin.get(schimb,105);
for(i=0;i<cate;i++)
{
frecv[schimb[i]-'A']=1-frecv[schimb[i]-'A'];
unde=1;
cout<<eval();
}
cout<<'\n';
cin.close();
cout.close();
return 0;
}