Pagini recente » Cod sursa (job #2256592) | Cod sursa (job #2430187) | Cod sursa (job #2862340) | Cod sursa (job #2486548) | Cod sursa (job #1816743)
#include <iostream>
#include<string.h>
#include<cstdio>
#include<ctype.h>
using namespace std;
char v[1005],sec[1005],sec2[1005];
int i,n,p;
void var(char c){
for(i=0;i<n;i++){
if(sec2[i]==c)
sec[i]=1-sec[i];
}
}
int expresie();
int factor();
int expresie(){
int rez=factor(),termeni;
while(sec[p]=='&' || sec[p]=='|'){
if(sec[p]=='&'){
p++;
termeni=factor();
if(rez==1 && termeni==1)
rez=1;
else
rez=0;
}
else{
p++;
termeni=factor();
if(rez==0 && termeni==0)
rez=0;
else
rez=1;
}
}
return rez;
}
int factor(){
int val=0,semn=1;
while(sec[p]=='!'){
semn=1-semn;
}
if(sec[p]=='('){
p++;
val=expresie();
p++;
return semn*val;
}
val=sec[p];
return semn*val;
}
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'){
sec2[j]=sec[j]='&';
j++;
i+=2;
}
else{
if(v[i]=='O' && v[i+1]=='R'){
sec2[j]=sec[j]='|';
j++;
i++;
}
else{
if(v[i]=='N' && v[i+1]=='O'){
sec2[j]=sec[j]='!';
j++;
i+=2;
}
else{
if(v[i]=='T' && v[i+1]=='R'){
sec2[j]=sec[j]=1;
j++;
i+=3;
}
else{
if(v[i]=='F' && v[i+1]=='A'){
sec2[j]=sec[j]=0;
j++;
i+=4;
}
else{
if(v[i]!=' '){
sec2[j]=v[i];
if(isalpha(v[i]))
sec[j]=0;
else
sec[j]=v[i];
j++;
}
}
}
}
}
}
}
fscanf(fin,"%d ",&m);
fout=fopen("bool.out","w");
int k;
for(k=0;k<m;k++){
c=fgetc(fin);
var(c);
rezultat=expresie();
fprintf(fout,"%d",rezultat);
}
fclose(fin);
fclose(fout);
return 0;
}