水电电工知识
电工知识|西门子S7-200PLC由“冒泡法”排序算法的逆向思考
2016-01-13  浏览:58
水电之家讯:在一些C语言资料上看到,“冒泡法”排序一般是从最后一个数据开始,向地址小的方向相邻两个数据比较,并按照从小到大或者从大到小排序的一种算法。在数据比较、移动的过程中,数据的运动,看起来好像水中的气泡向上运动。故而称之为“冒泡法”排序。

“冒泡法”排序,在知道数据的起始地址、数据个数、数据类型后,需要算出最后一个数据的地址,并从最后的一个地址开始运算排序。我在想,为什么不能从数据的起始地址开始排序呢,如果采用这种“下沉法”排序,还能省去计算数据的结束地址,程序应该会更简洁。于是自己就试着写了一下“下沉法”排序的plc程序代码,并测试通过。

排序环境:224CPU,从VB1000开始连续20个整数,从小到大排序。“下沉法”排序算法参考代码如下:



//******************给外循环体、内循环体的循环次数赋初值***********************

LD SM0.0 //开始执行从小到大的排序程序

MOVW 19, LW2 //给外循环次数(数据个数-1)赋初值

MOVW 19, LW6 //给内循环次数(数据个数-1)赋初值



//*******************建立外循环体并定义排序的其实地址*****************************

FOR LW0, +1, LW2 //FOR外循环体循执行LW2次

MOVD &VB1000, AC1 //将V区的起始地址赋给AC1,定义排序的起始地址



//**************建立内循环体并开始进行相邻的两个数据比较、移动****************

FOR LW4, +1, LW6 //FOR内循环体循执行LW6次

MOVD AC1, AC2 //把当前AC1里面的地址存储到AC2里面

+D +2, AC2 //AC2当前地址+2,存入AC2

LDW< *AC2, *AC1 //如果AC2指向的地址里面的内容小于AC1指向的地址里面的内容

MOVW *AC1, LW8 //那么将当前两个地址里面的内容互换

MOVW *AC2, LW10 //如果AC2指向的地址里面的内容不小于AC1指向的地址里面的内容

MOVW LW8, *AC2 //那么当前两个地址里面的内容保持不变

MOVW LW10, *AC1 //如果把小于比较指令改成大于比较指令,那么数据就是从大到小排序

LD SM0.0

+D +2, AC1 //AC1当前地址+2,存入AC1

NEXT //跳转到FOR内循环,如果内循环执行结束,程序往下执行



//*******************内循环执行结束,进入外循环执行*****************************

DECW LW6 //内循环体执行结束,将内循环体的循环次数减1

NEXT //跳转到FOR外循环,如果外循环执行结束,程序往下执行

上面代码基本采用临时变量作运算的,其实还可以将其封装成一个子程序,实现多次调用。水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 管材 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 BYBC.CN SYSTEM All Rights Reserved