| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 313 人关注过本帖
标题:学生:归结原理 ,问题:程序不能工作,没有错误、警告
取消只看楼主 加入收藏
oulin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:0 
学生:归结原理 ,问题:程序不能工作,没有错误、警告
为什么不能工作呢,没有语法错误与警告??请大侠看看

#include"stdio.h"
#include"stdio.h"
#define MaxSize 100
////////////////////////////////////////////////////////////
typedef struct{
 int data;
}ElemType;
////////////////////////////////////////////////////////////
typedef struct{
 ElemType elem[MaxSize];
 int len;
}SqList;
//////////////////////////////////////////////////////////////
typedef struct{
 SqList and;
 SqList or;
}TC;
////////////////////////////////////////////////////////////
void InitSqList(SqList *p){
 p->len=0;
}
///////////////////////////////////////////////////////////
void InitTC(TC *p){
 InitSqList(&p->and);
 InitSqList(&p->or);
}
/////////////////////////////////////////////////////////////////
int InsertAnd(TC *tc,SqList *p, int e){
  if(p->len>=MaxSize)
   return 0;
  p->elem[p->len].data=e;
  p->len=p->len+1;
  tc->and=*p;
  return 1;
}
////////////////////////////////////////////////////////////////////
int InsertOr(TC *tc,SqList *p,int e){
  if(p->len>=MaxSize)
   return 0;
  p->elem[p->len].data=e;
  p->len=p->len+1;
  tc->or=*p;
  return 1;
}
////////////////////////////////////////////////////////////////////////
void ShowTc(TC *tc){
  int i,j;

 for(i=0;i<tc->and.len-1;i++)
  if(tc->and.elem[i].data!=0){
   printf("P%d&",tc->and.elem[i].data);
  }
    if(tc->and.elem[i].data!=0)
  printf("P%d",tc->and.elem[i].data);
 printf("->");
 
 for(j=0;j<tc->or.len-1;j++)
  if(tc->or.elem[i].data!=0){
  printf("P%d|",tc->or.elem[j].data);
  }
 if(tc->or.elem[j].data!=0)
   printf("P%d",tc->or.elem[j].data);

 printf("\n\n");
}
////////////////////////////////////////////////////////////////////////////
int Relution(TC TC[],int n,int num[],int m){
 int i,j,k;
 int number1[MaxSize]={0};
 int number2[MaxSize]={0};
 for(i=0;i<m;i++){
  for(j=0;j<n;j++){
   for(k=0;k<TC[j].and.len;k++)
    if(num[i]==TC[j].and.elem[k].data){
     number1[i]=number1[i]+1;
    }
  }
 if(i==0)
  printf("And:\n");
 printf("%d\tP(%d+1)\n",number1[i],i);
 }
////////////////////////////////////////////////////////////////////////////////////
 for(i=0;i<m;i++){
  for(j=0;j<n;j++){
   for(k=0;k<TC[j].or.len;k++){
    if(num[i]==TC[j].or.elem[k].data){
     number2[i]=number2[i]+1;
    }
   }
  }
 if(i==0)
  printf("Or:\n");
 printf("%d\tP(%d+1)\n",number2[i],i);
 }
//////////////////////////////////////////////////////////////////////////////////////
    for(i=0;i<m;i++){
     if(number1[i]==number2[i])
      printf("this is empty\n");
    }
    for(i=0;i<m;i++){
     if(number1[i]>number2[i]) {
      for(j=1;j<=(number1[i]-number2[i]);j++)
        printf("P%d&",(num[i]));
     j=i;
     if(number1[j+1]>number2[j+1]&&(j+1)<m)
      printf("&");
     }
   
    }
   
    printf("->");
    for(i=0;i<m;i++){
     if(number1[i]<number2[i]) {
      for(j=1;j<=(number2[i]-number1[i]);j++)
        printf("P%d",(num[i]));
     j=i;
     if(number1[j+1]<number2[j+1]&&(j+1)<m)
      printf("|");
     }
      
    }
   
  printf("\n");
    return 1;
  }
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void  Relution2(TC tc[] ,int n1,int n2){
 int i, j=0, k ,x=0,y=0 , l=0 ,m=0;
 int r1=0,r2=0,r3=0,r4[2][20]={0},r5[2]={0},r6,r7[2][20]={0},r8[2]={0},r9;
 int p,q,r;
 int num1=0,num2=0;
 int sign1,sign2;
 for(i=0;i<n1+r1;i++){// 重复 利用 字句 包括 新生成
   for(k=0;k<n1;k++){//重复使用 已知条件
    r6=0;
    r9=0;
    if(k!=i){
     while(x<tc[i].and.len||y<tc[i].or.len){//while 2
      while(l<tc[k].and.len||m<tc[k].or.len){// while 3
       if(tc[i].and.elem[x].data!=0){
       if(tc[i].and.elem[x].data==tc[k].or.elem[m].data){// 查找 可生成的新字句
        r4[0][r5[0]++]=x;
        r4[1][r5[1]++]=m;
        r6++;
        }//end if
       }
       if(tc[i].or.elem[y].data==0){
       if(tc[i].or.elem[y].data==tc[k].and.elem[l].data){// 查找 可生成的新字句
        r7[0][r8[0]++]=y;
        r7[1][r8[1]++]=l;
        r9++;
        }//end if
       }
       l++;
       m++;
       }//end while 3
      x++;
      y++;
      }// end while 2
//*********************************************************************************************************************************
    if(r6>0||r9>0){
     if(r6>0){
      if(r6<tc[i].and.len){
       for(p=0;p<tc[i].and.len;p++){
        r=0;
       if(tc[i].and.elem[p].data!=0){
        for(q=0;q<r5[0];q++){
         if(p!=r4[0][q]){
          r++;
          if(r==(r5[0]-1))
          {tc[n1+r1].and.elem[num1++].data=tc[i].and.elem[p].data;}// end if r=..//s生成新字句
          }// end if p != r4..
         }//end for q <r5[]..
        }//end if tc[i].and.elem[p]!=0
       }// end for p <tc[i].and.len
      }//end if r6<tc[i].and.len
      if(r6<tc[k].or.len){
       for(p=0;p<tc[k].or.len;p++){
        r=0;
        if(tc[k].or.elem[p].data!=0){
        for(q=0;q<r5[1];q++){
         if(p!=r4[1][q]){
          r++;
          if(r==(r5[1]-1))
          { tc[n1+r1].or.elem[num2++].data=tc[k].or.elem[p].data;} // end if   //s生成新字句
         }// end if  p
        }//end for q
        }// end if tc[k].or.elem[p]!=0
       }// end for p
      }//end if r6<tc[k].or.len
     }// end if r6 !=0
//***********************************************************************************************************************************
      if(r9>0){
       if(r9<tc[i].or.len){
       for(p=0;p<tc[i].or.len;p++){
        r=0;
       if(tc[i].or.elem[p].data!=0){
        for(q=0;q<r8[0];q++){
         if(p!=r7[0][q]){
          r++;
          if(r==(r8[0]-1))
          { tc[n1+r1].or.elem[num2++].data=tc[i].or.elem[p].data;}//end if r //s生成新字句
         }//end if p
       }// end for q
       }// end if tc[i].or.elem[p]!=0
      }// end for p
     }//end if  r9<tc[i].or.len
      if(r9<tc[k].and.len){
         for(p=0;p<tc[k].and.len;p++){
        r=0;
        if(tc[k].and.elem[p].data!=0){
        for(q=0;q<r8[1];q++){
         if(p!=r7[1][q]){
          r++;
          if(r==(r8[1]-1))
          {tc[n1+r1].and.elem[num1++].data=tc[k].and.elem[p].data;}// end if r //s生成新字句
         }// end if p
        }// end for q
        }// end if tc[k].and.elem[p].data!=0
       }//end for p
      }// end if r9 <tc[k].and.len
     }//end if r9!=0
      if(r6==tc[i].and.len&&r9==tc[k].and.len){ //s生成新字句
      tc[n1+r1].and.elem[num1++].data=0;
      }
      if(r6==tc[i].or.len&&r9==tc[k].or.len){ //s生成新字句
      tc[n1+r1].or.elem[num2++].data=0;
      }
      if(i>=n1&&i<n2){
       sign1=0;
       sign2=0;
       for(p=0;p<tc[n1+r1].and.len;p++){
       if(tc[n1+r1].and.elem[p].data==0)
        sign1++;
       }
       for(q=0;q<tc[n1+r1].or.len;q++){
       if(tc[n1+r1].or.elem[q].data==0)
        sign2++;
       }
       if(sign1==tc[n1+r1].and.len&&sign2==tc[n1+r1].or.len){// 判断新子句是否
        printf("->");
        break;
       }
       if((n1+r1)>=(n2-1)){// 判断是否应该输出
       printf("error!\n");
        break;
       }
      }
      r1++;
//*********************************************************************************************************************************
    }//end if r6 || r9 !=0
   } // end if k!=i
  }// end for
 }// end for
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
main(){
int e;
int i;
int num[]={1,2,3};
SqList and,or;
TC TC[20];
for(i=0;i<50;i++)
 InitTC(&TC[i]);
InitSqList(&and);
InitSqList(&or);
e=2;
InsertAnd(&TC[0],&and,e);
e=3;
InsertAnd(&TC[0],&and,e);
e=1;
InsertOr(&TC[0],&or,e);
ShowTc(&TC[0]);
InitSqList(&and);
InitSqList(&or);
e=0;
InsertAnd(&TC[1],&and,e);
e=2;
InsertOr(&TC[1],&or,e);
ShowTc(&TC[1]);
InitSqList(&and);
InitSqList(&or);
e=0;
InsertAnd(&TC[2],&and,e);
e=3;
InsertOr(&TC[2],&or,e);
ShowTc(&TC[2]);
InitSqList(&and);
InitSqList(&or);
e=1;
InsertAnd(&TC[3],&and,e);
e=0;
InsertOr(&TC[3],&or,e);
ShowTc(&TC[3]);
Relution(TC,4,num,3);
Relution2(TC,4,50);
return 1;
}

搜索更多相关主题的帖子: 工作 include 
2012-11-06 16:14
快速回复:学生:归结原理 ,问题:程序不能工作,没有错误、警告
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017978 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved