三菱st语言for_三菱ST学习之FOR循环(从大到小排序)

本文通过三菱ST语言介绍如何实现从大到小的排序算法。详细讲解了程序设计过程,包括数据初始化、循环比较和交换,以及监控程序执行后的结果,展示了一种递归排序的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于上一篇我们分析了,从小到大的排序,并发现了程序的小问题,那今天我们就通过从大到小的方式来对程序进行优化。

一、从大到小排序

通过ST语言,将一组乱序的数据,按照从大到小的方式排列。

1.建立全局标签(声明变量)

a34c3700b5ad22e79fa911bdc4af1236.png

2.编写程序

91bcf2072dc6d77ee2713c89a7d9f0ea.png

3.程序的监控

首先还是将数组的数据进行赋值。赋值如下图所示:

1af307e07ad85a1004c796aa2733bc52.png

先将“Data_Bulk”赋值为6,然后再按下M0,执行程序。

263d1c27cd6882b67438f7ac9292882c.png

和上一票文章的程序比较,小伙伴儿们有没有发现这个程序的改动呢?

程序原理解析:

(地址[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的循环次数,也减少了控制器的运行负担。今天就先分享到这里,下一篇分享如何找最值。最后祝各位小伙伴儿工作顺利,天天开心!?

a8c9b4f3b3efd68c164bf70669973037.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值