欢迎来到天天文库
浏览记录
ID:38718479
大小:165.00 KB
页数:19页
时间:2019-06-18
《王浩算法c语言实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、大连海事大学人工智能基础课程实验报告(2011-2012学年第一学期)王浩算法班级:学号:姓名:指导老师:2011年12月7日王浩算法的实现一.实验内容实现命题逻辑框架内的王浩算法。1.将命题逻辑中的王浩算法推广至下述命题语言的情形之下:(1).命题变量符号:p1,p2,p3,……(2).逻辑连接符:﹁,︿,﹀,->,……(3).间隔符:(,)……2.在上述1中所定义的命题语言中实现王浩算法。二.实验目的熟练掌握命题逻辑中的王浩算法。三.实验要求1.实验题目必须由个人独立完成,允许自行参考相关文献资料,但严禁同学间相互拷贝和抄袭程序以及文
2、档资料。实验结束后一周内上交实验报告和实验文档资料。2.提交的文档资料包括设计文档和程序源代码。设计文档和程序源代码以书面文档方式提供(用A4纸打印),并提交电子文档备查。四.数据结构给定公式,例如:(p1->(q1->r1))->((p1->q1)->(p1->r1))函数inite主要作用是负责将符号初始化成树的结构。函数clone复制一棵完全相同的符号树。函数restruct查找所有&,
3、,<->等符号,并将其拆分成新形式:!,->符号。函数searching王浩算法的主要函数。函数show和output:显示符号串和推理过程。五.
4、实验结果公式正确公式错误六.实验总结公式不是恒真的时候,不一定是恒假的,王浩算法实质上是一个反向推理过程,它把给定的公式化成合取范式,然后通过判断每个子句是否恒真的来判定给定的公式是否是恒真的。所以,王浩算法不能说明公式恒假,只能说明不是恒真的。程序中的move函数十分重要,有的时候可能出现程序不能运行的情况所以,写这个函数时候是非常谨慎小心的。附:程序源代码#include#include#include#defineMAX_L5inti=0;intstepcount=1;enu
5、mtype{and,or,detrusion,equal,level,variable};structnode{char*s;typekind;intpolar;node*next;node*child;intstart;};structstep{step*child;step*brother;node*lhead;node*rhead;intcount;charname[30];};intinite(char*s,node*head){intlen=strlen(s);intj=0,polar=1;node*current=NULL;n
6、ode*last=NULL;if(s==NULL)return0;last=head;while(i7、'){if(!(s[i+1]<='Z'&&s[i+1]>='A'8、9、s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'10、11、i==0)return0;current=(node*)malloc(sizeof(node));current->kind=or;current->s=NULL;current->n12、ext=NULL;current->child=NULL;current->polar=polar;current->start=0;if(last->kind==level&&last->child==NULL){last->child=current;}else{last->next=current;}last=current;i++;}elseif(s[i]=='&'){if(!(s[i+1]<='Z'&&s[i+1]>='A'13、14、s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'15、&&s[i+1]!='('&&s[i+1]!='!'16、17、i==0)return0;current=(node*)malloc(sizeof(node));current->kind=and;current->s=NULL;current->next=NULL;current->child=NULL;current->polar=polar;current->start=0;if(last->kind==level&&last->child==NULL){last->child=current;}else{last->next=curren18、t;}last=current;i++;}elseif(s[i]=='!'){if(!(s[i+1]<='Z'&&s[i+1]>='A'19、20、s[i+1]<='z'&&s[i+1]>='a')&
7、'){if(!(s[i+1]<='Z'&&s[i+1]>='A'
8、
9、s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'
10、
11、i==0)return0;current=(node*)malloc(sizeof(node));current->kind=or;current->s=NULL;current->n
12、ext=NULL;current->child=NULL;current->polar=polar;current->start=0;if(last->kind==level&&last->child==NULL){last->child=current;}else{last->next=current;}last=current;i++;}elseif(s[i]=='&'){if(!(s[i+1]<='Z'&&s[i+1]>='A'
13、
14、s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'
15、&&s[i+1]!='('&&s[i+1]!='!'
16、
17、i==0)return0;current=(node*)malloc(sizeof(node));current->kind=and;current->s=NULL;current->next=NULL;current->child=NULL;current->polar=polar;current->start=0;if(last->kind==level&&last->child==NULL){last->child=current;}else{last->next=curren
18、t;}last=current;i++;}elseif(s[i]=='!'){if(!(s[i+1]<='Z'&&s[i+1]>='A'
19、
20、s[i+1]<='z'&&s[i+1]>='a')&
此文档下载收益归作者所有