Pagini recente » Cod sursa (job #1725819) | Cod sursa (job #2955843) | Cod sursa (job #1683841) | Cod sursa (job #3192371) | Cod sursa (job #312928)
Cod sursa(job #312928)
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#define MaxN 109
#define MaxS 1009
#define MaxC 300
char S[MaxS],sch[MaxN];
int N,var[MaxC];
int termen(int);
int factor(int);
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 k)
{
int r=termen(k);
char aux[4];
aux[0]=S[k]; aux[1]=S[k+1];
if(aux[0]=='A' && aux[1]=='N')
{
aux[2]=S[k+2];
aux[3]='\0';
}
else
aux[2]='\0';
while(aux=="AND" || aux=="OR")
{
if(aux=="AND")
{
k++;
r=r and termen(k);
}
else
if(aux=="OR")
{
k++;
r=r or termen(k);
}
}
return r;
}
int termen(int k)
{
int r=factor(k);
char aux[4];
aux[0]=S[k]; aux[1]=S[k+1]; aux[2]=S[k+2];
aux[3]=S[k+3];
while(aux=="NOT")
r=!factor(k);
return r;
}
int factor(int k)
{
int r;
char aux[6];
strncpy(aux,S+k,5);
if(aux[5]!='E')
aux[5]='\0';
aux[6]='\0';
if(S[k]=='(')
{
k++;
r=eval(k);
k++;
}
else
if(S[k]==' ')
{
k++;
r=eval(k);
}
else
{
if(aux=="FALSE")
r=0;
else
if(aux=="TRUE")
r=1;
else
r=var[S[k]-'A'];
}
return r;
}
int main()
{
cit();
ofstream fout("bool.out");
for(int i=0;i<N;i++)
{
if(var[sch[i]-'A']==0)
var[sch[i]-'A']=1;
else
var[sch[i]-'A']=0;
fout<<eval(0);
}
fout.close();
}