Pagini recente » Cod sursa (job #1443731) | Cod sursa (job #183035) | Cod sursa (job #1418263) | Cod sursa (job #2776091) | Cod sursa (job #312957)
Cod sursa(job #312957)
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <bitset>
#define MaxN 109
#define MaxS 1009
#define MaxC 300
using namespace std;
bitset<26> var;
char S[MaxS],sch[MaxN],str[MaxN];
int N,k;
int termen();
int factor();
void cit()
{
ifstream fin("bool.in");
fin.get(S,MaxS,'\n'); fin.get();
fin>>N; fin.get();
fin.get(sch,MaxN,'\n');
fin.close();
}
int eval()
{
int r=termen();
while(S[k]=='O' && S[k+1]=='R')
{
k+=3;
r=r or termen();
}
return r;
}
int termen()
{
int r=factor();
while(S[k]=='A' && S[k+1]=='N' && S[k+2]=='D')
{
k+=4;
r=r and factor();
}
return r;
}
int factor()
{
int r;
if(S[k]=='(')
{
k++;
r=eval();
k++;
}
else
if(S[k]=='N' && S[k+1]=='O' && S[k+2]=='T')
{
k+=4;
r=!factor();
} else
if(S[k]=='T' && S[k+1]=='R' && S[k+2]=='U' && S[k+3]=='E')
{
k+=5;
r=1;
} else
if(S[k]=='F' && S[k+1]=='A' && S[k+2]=='L' && S[k+3]=='S' && S[k+4]=='E')
{
k+=6;
r=0;
} else
{
r=var[S[k]-'A'];
k+=2;
}
return r;
}
int main()
{
cit();
int i=-1,n=strlen(S),m=-1;
while(i<n)
{
i++;
str[++m] = S[i];
while(S[i] == S[i + 1] && S[i + 1] == ' ' && i < n)
i++;
}
str[++m]=0;
strcpy(S,str);
ofstream fout("bool.out");
for(int i=0;i<N;i++)
{
var[sch[i]-'A']=1-var[sch[i]-'A'];
k=0;
fout<<eval();
}
fout.close();
}