Pagini recente » Cod sursa (job #2922103) | Cod sursa (job #1352461) | Cod sursa (job #2586289) | Cod sursa (job #181542) | Cod sursa (job #1826526)
#include <iostream>
#include<string.h>
#include<cstdio>
#include<ctype.h>
using namespace std;
char v[1005],sec[1005];
int litere[26];
int i=0,n,p;
int expresie();
int termen();
int factor();
int expresie(){
int val=termen();
while(sec[i]=='|'){
i++;
val=val|termen();
}
return val;
}
int termen(){
int val=factor();
while(sec[i]=='&'){
i++;
val=val&factor();
}
return val;
}
int factor(){
int val=0;
if(sec[i]=='!'){
i++;
return !factor();
}
if(sec[i]=='('){
i++;
val=expresie();
i++;
return val;
}
if(sec[i]=='1'){
i++;
return 1;
}
if(sec[i]=='0'){
i++;
return 0;
}
i++;
return litere[sec[i-1]-'A'];
}
int main()
{
FILE*fin,*fout;
char c;
fin=fopen("bool.in","r");
fgets(v,1002,fin);
int j=0,m,rezultat;
n=strlen(v);
n--;
for(i=0;i<n;i++){
if(v[i]=='A' && v[i+1]=='N'){
sec[j]='&';
j++;
i+=2;
}
else{
if(v[i]=='O' && v[i+1]=='R'){
sec[j]='|';
j++;
i++;
}
else{
if(v[i]=='N' && v[i+1]=='O'){
sec[j]='!';
j++;
i+=2;
}
else{
if(v[i]=='T' && v[i+1]=='R'){
sec[j]=1;
j++;
i+=3;
}
else{
if(v[i]=='F' && v[i+1]=='A'){
sec[j]=0;
j++;
i+=4;
}
else{
if(v[i]!=' '){
sec[j]=v[i];
j++;
}
}
}
}
}
}
}
fscanf(fin,"%d ",&m);
fout=fopen("bool.out","w");
for(j=0;j<m;j++){
c=fgetc(fin);
litere[c-'A']=1-litere[c-'A'];
i=0;
rezultat=expresie();
fprintf(fout,"%d",rezultat);
}
fclose(fin);
fclose(fout);
return 0;
}