Pagini recente » Cod sursa (job #957310) | Cod sursa (job #46206) | Cod sursa (job #2665206) | Cod sursa (job #1213651) | Cod sursa (job #2131387)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
char var[26],exp[1000];
#define AND 0
#define OR 1
#define NOT 2
#define TRUE 3
#define FALSE 4
char so[1001],s[1001],c;
int i,j,l,n;
int eval(int l1,int l2)
{
/*for(int i=l1;i<=l2;i++)
{
if(exp[i]==AND)cout<<"AND";
else if(exp[i]==OR)cout<<"OR";
else if(exp[i]==NOT)cout<<"NOT";
else if(exp[i]==TRUE)cout<<"TRUE";
else if(exp[i]==FALSE)cout<<"FALSE";
else cout<<exp[i];
cout<<' ';
}
cout<<'\n';*/
if(l1==l2)
{
if(exp[l1]==TRUE)return 1;
else if(exp[l1]==FALSE)return 0;
else return var[exp[l1]-'A'];
}
int i,p;
for(i=l1,p=0;i<l2;i++)
{
if(exp[i]=='(')p++;
else if(exp[i]==')')p--;
else if(p==0&&exp[i]==OR)return eval(l1,i-1)||eval(i+1,l2);
}
for(i=l1,p=0;i<l2;i++)
{
if(exp[i]=='(')p++;
else if(exp[i]==')')p--;
else if(p==0&&exp[i]==AND)return eval(l1,i-1)&&eval(i+1,l2);
}
if(l1=='('&&l2==')')return eval(l1+1,l2-1);
return !(eval(l1+1,l2));
}
void adv(int&i)
{
i+=strlen(s+i);
while(s[i]=='\0')i++;
}
int main()
{
fstream f("bool.in",ios::in),g("bool.out",ios::out);
f.getline(so,1001);
l=strlen(so);
for(i=0,j=0;i<l;i++,j++)
{
if(so[i]==' ')s[j]='\0';
else if(so[i]=='(')
{
s[j]='(';
j++;
s[j]='\0';
}
else if(so[i]==')')
{
s[j]='\0';
j++;
s[j]=')';
}
else s[j]=so[i];
}
s[j]='\0';
l=j;
//for(i=0,j=0;i<l;i+=strlen(s+i)+1,j++)cout<<s+i<<' ';
//cout<<'\n';
for(i=0,j=0;i<l;adv(i),j++)
{
if(!strcmp(s+i,"AND"))exp[j]=AND;
else if(!strcmp(s+i,"OR"))exp[j]=OR;
else if(!strcmp(s+i,"NOT"))exp[j]=NOT;
else if(!strcmp(s+i,"TRUE"))exp[j]=TRUE;
else if(!strcmp(s+i,"FALSE"))exp[j]=FALSE;
else if(!strcmp(s+i,"("))exp[j]='(';
else if(!strcmp(s+i,")"))exp[j]=')';
else exp[j]=s[i];
}
l=j;
/*for(i=0;i<l;i++)
{
if(exp[i]==AND)cout<<"AND";
else if(exp[i]==OR)cout<<"OR";
else if(exp[i]==NOT)cout<<"NOT";
else if(exp[i]==TRUE)cout<<"TRUE";
else if(exp[i]==FALSE)cout<<"FALSE";
else cout<<exp[i];
cout<<' ';
}*/
f>>n;
for(i=0;i<n;i++)
{
f>>c;
var[c-'A']=!var[c-'A'];
g<<eval(0,j-1);
}
}