Pagini recente » Cod sursa (job #2033714) | Monitorul de evaluare | Cod sursa (job #2942145) | Diferente pentru rotatie-lexicografic-minima intre reviziile 28 si 27 | Cod sursa (job #181279)
Cod sursa(job #181279)
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
ifstream f("bool.in");
ofstream g("bool.out");
char sir2[5000],st[5000],*y,polo[5200],sir[5010],x[5100],op[]="()&~|",*p,c='&',c2='|',c3='~',special='?',special2='!';
char ultima[5110];
int vect[27],okm,ok,k,i,n,vf=-1,carry,st2[12000];
int schimba(int c)
{
if(c==0) return 1;
return 0;
}
int ssau(int a,int b)
{
if(a!=0 || b!=0) return 1;
return 0;
}
int ssi(int a,int b)
{
if(a==1 && b==1) return 1;
return 0;
}
int nsot(int a)
{
if(a==0) return 1;
return 0;
}
int evaluare(int vect[27])
{
int i,l=0,k;
k=strlen(polo);
for(i=0;i<k;i++)
{
if(polo[i]==special)
st2[++l]=1;
if(polo[i]==special2)
st2[++l]=0;
if(isalpha(polo[i]))
st2[++l]=vect[polo[i]-'A'];
switch (polo[i])
{
case '|':st2[l-1]=ssau(st2[l-1],st2[l]);l--;break;
case '&':st2[l-1]=ssi(st2[l-1],st2[l]);l--;break;
case '~':st2[l]=nsot(st2[l]);break;
}
}
return st2[1];
}
char pop()
{
if(st[vf]>=0) return st[vf--];
return 0;
}
void push(char c)
{
st[++vf]=c;
}
int main()
{
f.getline(sir,1001);
n=strlen(sir);
k=-1;
for(i=0;i<n;i++)
{
ok=0;
if(sir[i]=='N' &&sir[i+1]=='O' &&sir[i+2]=='T')
{sir2[++k]=c3;i+=2;ok=1;}
if(sir[i]=='A' &&sir[i+1]=='N' &&sir[i+2]=='D')
{sir2[++k]=c;i+=2;ok=1;}
if(sir[i]=='O' &&sir[i+1]=='R')
{sir2[++k]=c2;i+=1;ok=1;}
if(sir[i]=='T' && sir[i+1]=='R' && sir[i+2]=='U' && sir[i+3]=='E')
{ sir2[++k]=special;i+=3;ok=1;}
if(sir[i]=='F' && sir[i+1]=='A' && sir[i+2]=='L' && sir[i+3]=='S' && sir[i+4]=='E')
{ sir2[++k]=special2;i+=4;ok=1;}
if(ok==0 && sir[i]!=' ')
sir2[++k]=sir[i];
}
k=-1;
for(i=0;i<n;i++)
{
if(!strchr(op,sir2[i]))
polo[++k]=sir2[i++];
switch(sir2[i])
{
case '(': push(sir2[i]);break;
case ')': while((carry=pop())!='(') polo[++k]=carry;break;
case '&': if(strchr("(|",st[vf]) || (vf==-1)) push(sir2[i]);
else if(strchr("~&",st[vf])) {polo[++k]=pop();i--;}break;
case '~': if(strchr("~",st[vf])){polo[++k]=pop();i--;}
else push(sir2[i]);break;
case '|': if(strchr("(",st[vf]) || (vf==-1)) push(sir2[i]);
else if(strchr("~&|",st[vf])) {polo[++k]=pop();i--;}break;
}
}
while((carry=pop())!=0)
polo[++k]=carry;
polo[++k]=0;
f.getline(ultima,102);
okm=atoi(ultima);
for(i=0;i<=26;i++)
vect[i]=0;
f.getline(ultima,102);
for(i=0;i<okm;i++)
{
int po=ultima[i]-'A';
vect[po]=schimba(vect[po]);
g<<(evaluare(vect));
}g<<"\n";
return 0;
}