Pagini recente » Cod sursa (job #355303) | Cod sursa (job #488143) | Cod sursa (job #193189) | Cod sursa (job #2821941) | Cod sursa (job #1576963)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int v[101], p;
char s[1001];
int expresie();
int termen();
int factor();
int sau(int a, int b)
{
if(a==0 && b==0)
return 0;
return 1;
}
int si(int a, int b)
{
if(a==1 && b==1)
return 1;
return 0;
}
int expresie()
{
int r = termen();
while(s[p]=='|')
{
p++;
r=sau(r, termen());
}
return r;
}
int termen()
{
int r = factor();
while(s[p]=='&')
{
p++;
r=si(r, termen());
}
return r;
}
int factor()
{
int r, no=0;
while(s[p]=='!')
{
no=!no;
p++;
}
if(s[p]=='(')
{
p++;
r=expresie();
// p++;
if(no==1)
return !r;
return r;
}
if(s[p]==0 || s[p]==1)
{
p++;
if(no==1)
return !r;
return r;
}
if(s[p]>='A' && s[p]<='Z')
{
if(no==1)
v[s[p]]=!v[s[p]];
r=v[s[p]];
//p++;
return r;
}
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
int i, n, j=0;
char a[1001], c;
cin.get(a, 1001);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]!=' ')
{
if(a[i]=='A')
{
if(a[i+1]=='N')
{
s[j++]='&';
i+=2;
}
else s[j++]=a[i];
}else if(a[i]=='O')
{
if(a[i+1]=='R')
{
s[j++]='|';
i+=1;
}
else s[j++]=a[i];
}else if(a[i]=='N')
{
if(a[i+1]=='O')
{
s[j++]='!';
i+=2;
}
else s[j++]=a[i];
}else if(a[i]=='T')
{
if(a[i+1]=='R')
{
s[j++]='1';
i+=3;
}
else s[j++]=a[i];
}else if(a[i]=='F')
{
if(a[i+1]=='A')
{
s[j++]='0';
i+=4;
}
else s[j++]=a[i];
}
else s[j++]=a[i];
}
}
s[j]=NULL;
cin>>n;
cout<<s<<endl;
for(i=1;i<=n;i++)
{
cin>>c;
if(v[c]==0)
v[c]=1;
else
v[c]=0;
cout<<expresie();
}
return 0;
}