一、从大到小排序
通过ST语言,将一组乱序的数据,按照从大到小的方式排列。
1.建立全局标签(声明变量)
2.编写程序
3.程序的监控
首先还是将数组的数据进行赋值。赋值如下图所示:
先将“Data_Bulk”赋值为6,然后再按下M0,执行程序。
和上一票文章的程序比较,小伙伴儿们有没有发现这个程序的改动呢?
程序原理解析:
(地址[0]=15,地址[1]=40,地址[2]=34,地址[3]=6,地址[4]=15,地址[5]=21).
执行第一次外循环(0~5)
执行第一次内循环(0)
将地址[0]=15 和 地址[1]=40 进行比较,比较15<40,比较成立,则程序执行。先将地址[0]的值15存放到“数据暂储”单元;然后将地址[1]的值40赋值给地址[0];最后将“数据暂储”单元的值赋值到地址[1]中。即地址[0]=40,地址[1]=15。
执行第二次内循环(1)
将地址[1]=15 和 地址[2]=34 进行比较,比较15<34,比较成立,则程序执行。先将地址[1]的值15存放到“数据暂储”单元;然后将地址[2]的值34赋值给地址[1];最后将“数据暂储”单元的值赋值到地址[2]中。即地址[1]=34,地址[2]=15。
执行第三次内循环(2)
将地址[2]=15 和 地址[3]=6 进行比较,比较15<6,比较不成立,则程序不执行。即地址[2]=15。
执行第四次内循环(3)
将地址[3]=6 和 地址[4]=15 进行比较,比较6<15,比较成立,则程序执行。先将地址[3]的值6存放到“数据暂储”单元;然后将地址[4]的值15赋值给地址[3];最后将“数据暂储”单元的值赋值到地址[4]中。即地址[3]=15,地址[4]=6。
执行第五次内循环(4)
将地址[4]=6 和 地址[5]=21 进行比较,比较5<21,比较成立,则程序执行。先将地址[4]的值6存放到“数据暂储”单元;然后将地址[5]的值21赋值给地址[4];最后将“数据暂储”单元的值赋值到地址[5]中。即地址[4]=21,地址[5]=6。
第一次外循环结束,内循环也结束了。最终排列出来的结果如下:
40、34、15、15、21、6;此时最小值已经排列在地址的最高位了。
执行第二次外循环(1~5)
执行第一次内循环(0)
将地址[0]=40 和 地址[1]=34 进行比较,比较40<34,比较不成立,则不程序执行。即地址[0]=40。
执行第二次内循环(1)
将地址[1]=34 和 地址[2]=15 进行比较,比较34<15,比较不成立,则程序不执行。即地址[1]=34。
执行第三次内循环(2)
将地址[2]=15 和 地址[3]=15 进行比较,比较15<15,比较不成立,则程序不执行。即地址[2]=15。
执行第四次内循环(3)
将地址[3]=15 和 地址[4]=21 进行比较,比较15<21,比较成立,则程序执行。先将地址[3]的值15存放到“数据暂储”单元;然后将地址[4]的值21赋值给地址[3];最后将“数据暂储”单元的值赋值到地址[4]中。即地址[3]=21,地址[4]=15。
第二次外循环结束,内循环也结束了。最终排列出来的结果如下:
40、34、15、21、15、6;此时第二个小值已经排列出来了。
执行第三次外循环(2~5)
执行第一次内循环(0)
将地址[0]=40 和 地址[1]=34 进行比较,比较40<34,比较不成立,则不程序执行。即地址[0]=40。
执行第二次内循环(1)
将地址[1]=34 和 地址[2]=15 进行比较,比较34<15,比较不成立,则程序不执行。即地址[1]=34。
执行第三次内循环(2)
将地址[2]=15 和 地址[3]=21 进行比较,比较15<21,比较成立,则程序执行。先将地址[3]的值21存放到“数据暂储”单元;然后将地址[2]的值15赋值给地址[3];最后将“数据暂储”单元的值赋值到地址[2]中。即地址[2]=21,地址[3]=15。
第三次外循环结束,内循环也结束了。最终排列出来的结果如下:
40、34、21、15、15、6;此时第三个小值已经排列出来了。
通过观察我们发现数值已经完全排列好了,虽然我们的数据已经排列好,但我们的程序并没有运行结束,会继续运行下去,直至循环的结束,跳出循环为止。后面的的原理同上,就不在赘述啦。分享到这里,小伙伴儿们有没有发现,这个程序和上一篇的程序的区别呢?虽然只是小小的改动,但是却减少了FOR的循环次数,也减少了控制器的运行负担。今天就先分享到这里,下一篇分享如何找最值。最后祝各位小伙伴儿工作顺利,天天开心!?