Pagini recente » Statistici Loredana (Lori04) | Istoria paginii runda/simulareonidouamiioptclasanoua | Cod sursa (job #2006792) | Monitorul de evaluare | Cod sursa (job #179927)
Cod sursa(job #179927)
#include<stdio.h>
#include<string.h>
int y;
int oor(int a,int b){
if(a==1||b==1)
return 1;
return 0;
}
int aand(int a,int b){
if(a==0||b==0)
return 0;
return 1;
}
int nnot(int a,int b){
if(a==1){
b++;
b--;
}
if(b==0)
return 1;
return 0;
}
char x,v[11000],*p=v,t[100];
int V[200],k,z,i,n;
int termen();
int fact();
int fact2();
int eval(){
int r = termen();
while(*p=='|'){
p++;
r=oor(r,termen());
}
return r;
}
int termen(){
int r=fact();
while(*p=='&'){
p++;
r = aand(r,fact());
}
return r;
}
int fact(){
int r=fact2();
while(*p=='!'){
p++;
r = nnot(0,fact2());
}
return r;
}
int fact2(){
int r=0;
if(*p=='('){
p++;
r = eval();
p++;
}
else{
r=V[*p];
p++;
}
return r;
}
int main(){
FILE *f=fopen("bool.in","r");
k=-1;
fscanf(f,"%c",&x);
int ok=1;
while(x!='\n'){
if(x=='('||x==')'){
k++;
v[k]=x;
}
else{
z=-1;
while(x>='A'&&x<='X'){
z++;
t[z]=x;
fscanf(f,"%c",&x);
if(x=='\n'){
ok=0;
break;
}
}
if(strcmp(t,"TRUE")==0){
k++;
v[k]='1';
}
if(strcmp(t,"FALSE")==0){
k++;
v[k]='0';
}
if(strcmp(t,"AND")==0){
k++;
v[k]='&';
}
if(strcmp(t,"OR")==0){
k++;
v[k]='|';
}
if(strcmp(t,"NOT")==0){
k++;
v[k]='0';
k++;
v[k]='!';
}
if(z==0){
k++;
v[k]=t[0];
}
for(i=0;i<=10;i++)
t[i]=0;
if(x=='('||x==')'){
k++;
v[k]=x;
}
if(!ok)
break;
}
if(!ok)
break;
fscanf(f,"%c",&x);
if(x==' ')
fscanf(f,"%c",&x);
}
FILE *g=fopen("bool.out","w");
fscanf(f,"%d\n",&n);
int R;
V[1+48]=1;
for(i=1;i<=n;i++){
fscanf(f,"%c",&x);
p=v;
V[x]=!V[x];
R=eval();
fprintf(g,"%d",R);
}
fclose(f);
fclose(g);
return 0;
}