Pagini recente » Cod sursa (job #171807) | Cod sursa (job #2722053) | Cod sursa (job #2509673) | Cod sursa (job #2479754) | Cod sursa (job #2058313)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int n, i, j, p, x;
bool b[30];
char a[1000], c[100];
bool evaluare();
void paranteza(bool &k)
{
if(a[p]=='(')
{
p++;
k=evaluare();
p++;
while(a[p]==' ')
p++;
}
}
bool numar()
{
int k=0;
if(a[p]=='T' && a[p+1]=='R')
{
p+=4;
return 1;
}
else if(a[p]=='F')
{
p+=5;
return 0;
}
else if(a[p]>='A' && a[p]<='Z' && (a[p+1]<'A' || a[p+1]>'Z'))
{
int x=(int)a[p]-64;
p++;
return b[x];
}
/*while(a[p]==' ')
p++;*/
}
bool NOT()
{
bool k=0;
while(a[p]=='N' && a[p+1]=='O')
{
p+=3;
if(k==0)
k=1;
else k=0;
while(a[p]==' ')
p++;
}
paranteza(k);
if(k==1)
if(numar()==0)
return 1;
else return 0;
}
bool AND()
{
bool k=NOT();
while(a[p]=='A')
{
p+=3;
while(a[p]==' ')
p++;
if(NOT()==0)// || r==0)
k=0;
}
paranteza(k);
if(k==1)
if(numar()==0)
return 0;
else return 1;
}
bool OR()
{
bool k=AND();
while(a[p]=='O' && a[p+1]=='R')
{
p+=2;
while(a[p]==' ')
p++;
if(AND()==1 || k==1)
k=1;
else k=0;
}
return k;
}
bool evaluare()
{
while(a[p]==' ')
p++;
bool k=AND();
paranteza(k);
/*if(a[p]=='N')
k=NOT();
if(a[p]=='A')
if(k==1)
if(AND()==0)
k=0;*/
if(a[p]=='O')
if(k==0)
if(OR()==1)
k=1;
return k;
}
int main()
{
f.get(a,1000);
f>>n;
for(i=0;i<n;i++)
f>>c[i];
for(i=0;i<n;i++)
{
x=c[i]-64;
if(b[x]==1)
b[x]=0;
else b[x]=1;
p=0;
g<<evaluare();
}
return 0;
}