Pagini recente » Cod sursa (job #207284) | Cod sursa (job #247027) | Cod sursa (job #2419502) | Cod sursa (job #2395628) | Cod sursa (job #906845)
Cod sursa(job #906845)
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
int litere[31],n,k,i,c,sf;
char expresie[1010],p;
FILE *f;
int si(int v1,int v2)
{
if((v1<0)||(v2<0)){return -1;}
else{return 1;}
}
int sau(int v1,int v2)
{
if((v1>0)||(v2>0)){return 1;}
else{return -1;}
}
/*
int rezolva()
{
st++;int noturi=1,val=1,semn=1;//1 AND 2 OR
while(st<=n+1){
if((expresie[st]<='Z')&&(expresie[st]>='A')){
if((expresie[st+1]>'Z')||(expresie[st+1]<'A')){
if(semn==1){semn=0;val=si(val,litere[expresie[st]-'A']);}
if(semn==2){semn=0;val=sau(val,litere[expresie[st]-'A']);}
st++;
}
else{
if((expresie[st]=='T')&&(expresie[st+1]=='R')&&(expresie[st+2]=='U')&&(expresie[st+3]=='E')){
if(semn==1){semn=0;val=si(val,noturi);}
if(semn==2){semn=0;val=sau(val,noturi);}
st+=4;
}
if((expresie[st]=='F')&&(expresie[st+1]=='A')&&(expresie[st+2]=='L')&&(expresie[st+3]=='S')&&(expresie[st+4]=='E')){
if(semn==1){semn=0;val=si(val,noturi*-1);}
if(semn==2){semn=0;val=sau(val,noturi*-1);}
st+=5;
}
if((expresie[st]=='N')&&(expresie[st+1]=='O')&&(expresie[st+2]=='T')){noturi*=-1;st+=3;}
if((expresie[st]=='A')&&(expresie[st+1]=='N')&&(expresie[st+2]=='D')){semn=1;st+=3;}
if((expresie[st]=='O')&&(expresie[st+1]=='R')){semn=2;st+=2;}
}
}
if(expresie[st]==' '){st++;}
if(expresie[st]==')'){st++;return val;}
if(expresie[st]=='('){
if(semn==1){semn=0;val=si(val,rezolva());}
if(semn==2){semn=0;val=sau(val,rezolva());}
}
}}*/
int rezolva(int st)
{
sf=st;
int x[500],term=0,noturi=1,j;//x -1,1= valori 2=si 3=sau
while(expresie[sf]!=')'){
if(expresie[sf]=='('){x[++term]=noturi*rezolva(sf+1);noturi=1;}
if((expresie[sf]=='T')&&(expresie[sf+1]=='R')&&(expresie[sf+2]=='U')&&(expresie[sf+3]=='E')){
x[++term]=noturi;
noturi=1;
sf+=4;
}
if((expresie[sf]=='F')&&(expresie[sf+1]=='A')&&(expresie[sf+2]=='L')&&(expresie[sf+3]=='S')&&(expresie[sf+4]=='E')){
x[++term]=noturi*-1;
noturi=1;
sf+=5;
}
if((expresie[sf]=='N')&&(expresie[sf+1]=='O')&&(expresie[sf+2]=='T')){noturi*=-1; sf+=3;}
if((expresie[sf]=='A')&&(expresie[sf+1]=='N')&&(expresie[sf+2]=='D')){x[++term]=2;sf+=3;}
if((expresie[sf]=='O')&&(expresie[sf+1]=='R') ){x[++term]=3;sf+=2;}
if(((expresie[sf]<='Z')&&(expresie[sf]>='A'))&&((expresie[sf+1]>'Z')||(expresie[sf+1]<'A'))){x[++term]=noturi*litere[expresie[sf]-'A'];noturi=1;sf++;}
if(expresie[sf]==' '){sf++;}
}
sf++;
int alf;
for(j=1;j<=term;j++){
if(x[j]==2){alf=j-1;while(x[alf]==0){alf--;}x[alf]=si(x[alf],x[j+1]);x[j]=0;x[j+1]=0;}
}
for(j=1;j<=term;j++){
if(x[j]==3){alf=j-1;while(x[alf]==0){alf--;}x[alf]=sau(x[alf],x[j+1]);x[j]=0;x[j+1]=0;}
}
return x[1];
}
int main()
{
ifstream f("bool.in");
freopen("bool.out","w",stdout);
f.getline(expresie,1010);
n=strlen(expresie);
expresie[n]=')';
f>>k;
for(i=0;i<=30;i++){
litere[i]=-1;
}
for(i=1;i<=k;i++){
f>>p;
litere[p-'A']*=-1;
c=rezolva(0);
if(c==1){printf("%d",c);}
else{printf("0");}
}
return 0;
}