人工智能合一算法C++.docx

上传人:b****8 文档编号:11275296 上传时间:2023-02-26 格式:DOCX 页数:9 大小:94.41KB
下载 相关 举报
人工智能合一算法C++.docx_第1页
第1页 / 共9页
人工智能合一算法C++.docx_第2页
第2页 / 共9页
人工智能合一算法C++.docx_第3页
第3页 / 共9页
人工智能合一算法C++.docx_第4页
第4页 / 共9页
人工智能合一算法C++.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

人工智能合一算法C++.docx

《人工智能合一算法C++.docx》由会员分享,可在线阅读,更多相关《人工智能合一算法C++.docx(9页珍藏版)》请在冰豆网上搜索。

人工智能合一算法C++.docx

人工智能合一算法C++

人工智能-合一算法(C++)

人工智能第1次作业

一般合一算法(C++实现)

姓名:

佟学号:

201224班级:

12计本非师学院:

信息学院

 

一、简单程序如下

#include

#include

#include

usingnamespacestd;

intiC=0;//标记公式集中括号匹配数

classSyncretism{

private:

structTransform{//一个代换(差异集)

stringt_f1;

stringt_f2;

};

public:

boolIssyn(stringf1,stringf2,vector&t);//是否能合一

Transformdifferent(conststringf1,conststringf2)//求差异集

{

inti=0;

Transformt;

while(f1.at(i)==f2.at(i))

i++;

intj1=i;

while(j1

=',')

j1++;

if(j1-i==0)returnt;

t.t_f1=f1.substr(i,j1-i);

intj2=i;

while(j2

=',')

j2++;

if(j2-i==0)returnt;

t.t_f2=f2.substr(i,j2-i);

while(t.t_f1[j1-i-1]==t.t_f2[j2-i-1])

{

t.t_f1.erase(j1-1-i);

t.t_f2.erase(j2-i-1);

j1--;

j2--;

}

returnt;

}

boolsame(conststringf1,conststringf2);//判断两个公式是否相同

stringchange(stringf,Transformt);//用代换q对公式f进行合一代换

boollegal(Transform&t);//

intvar(conststrings);//s中每个()内的子串是变量还是常量

voidshow();//最终演示算法

};

boolSyncretism:

:

Issyn(stringf1,stringf2,vector&lan)

{

while(!

same(f1,f2))

{

Transformt=different(f1,f2);

boolflag=legal(t);

if(!

flag)

returnfalse;

else

{

lan.push_back(t);//将t加入vectorlan中

if(flag)

{

f1=change(f1,lan.back());//用lan的最后一个元素代换

f2=change(f2,lan.back());

cout<<"变换后:

"<

cout<<"f1:

"<

cout<<"f2:

"<

}

if(same(f1,f2))break;

}

}

returntrue;

}

boolSyncretism:

:

same(conststringf1,conststringf2)

{

if(pare(f2)==0)returntrue;

elsereturnfalse;

}

stringSyncretism:

:

change(stringf,Transformt)

{

inti=f.find(t.t_f2);

while(i

{

i=f.find(t.t_f2);

if(i

f=f.replace(i,t.t_f2.length(),t.t_f1);

}

returnf;

}

boolSyncretism:

:

legal(Transform&t)

{

if(t.t_f1.length()==0||t.t_f2.length==0)

returnfalse;

elseif(var(t.t_f1)==0||var(t.t_f2)==0)returnfalse;

elseif(var(t.t_f1)==1&&var(t.t_f2)==1&&t.t_pare(t.t_f2)!

=0)

returnfalse;

elseif(var(t.t_f1)==2)

{

if(var(t.t_f2)==1)

{

stringtemp=t.t_f1;//变量常量交换位置

t.t_f1=t.t_f2;

t.t_f2=temp;

}

else

{

inti1=var(t.t_f2);

i1=iC;

iC=0;

inti2=var(t.t_f1);

i2=iC;

if(i1

{

stringtemp=t.t_f1;//变量常量交换位置

t.t_f1=t.t_f2;

t.t_f2=temp;

}

}

returntrue;

}

else

returntrue;

}

intSyncretism:

:

var(conststrings)

{

if(s.length()==0)return0;//空

if(s.length()==1&&s[0]>='a'&&s[0]<='g')return1;//常量

if(s.length()>1)

{

inti=0;

while(i

='(')

i++;

iC++;

stringss=s.substr(i+1,s.length()-i-2);//抽取s中的匹配的()中的子串

returnvar(ss);

}

elsereturn2;

}

voidSyncretism:

:

show()

{

cout<<"常量:

形如a,b,c,d(a-g)等"<

形如x,y,z,u等"<

stringf1,f2;

cout<<"输入F1:

";

cin>>f1;

cout<<"输入F2:

";

cin>>f2;

vectorlan;

if(Issyn(f1,f2,lan))

{

if(same(f1,f2))//如果f1,f2相同则合一为ε

{

cout<<"合一σ=ε"<

return;

}

cout<<"合一σ={";

for(inti=0;i

cout<

cout<

}

else

cout<<"不能进行合一"<

}

intmain()

{

SyncretismSy;

Sy.show();

return0;

}

二、演示结果

三、程序的实现

Transform中的t_f1,t_f2分别表示差异集中的两个字符串。

Vector变量lan存放合一的集合。

函数功能

Issyn()判断两个公式是否相同。

different()求差异集。

change()用代换对公式进行合一代换。

legal()对t_f1,t_f2判断然后对换并判断是否为合一字符串

same()判断两个公式是否相同。

var()字符串每个()内的子串是变量还是常量。

show()最终演示算法函数。

 

四、具体程序执行

程序执行时先输入公式集中的公式然后调用Issyn函数判断是否能合一如果不能则退出,如果能判断公式是否相同相同则合一是ε。

不是则进一步判断。

调用different函数找出差异集放在vector变量lan中再调用legal函数和var函数判断合一时到底哪个是变量

哪个是常量t_f1存放常量t_f2存放变量不符合则进行交换,在用t_f1代换调公式中的t_f2进行下一轮的比较寻找差异集然后判断再代换。

每次差异集都添加到lan中最后输出lan中的元素。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1