广东湘恒智能科技有限公司
主营产品: 西门子变频器,西门子PLC\西门子模块、西门子触摸屏、西门子伺服电机、西门子工控机、西门子集成系统、西门子低压、西门子控制单元、西门子CPU,广东省西门子授权代理商,等
程序实例 | 1200用SCL语言实现十个数排序
发布时间:2024-11-22

在编程过程中经常会遇到需要将几个数按从大到小或从小到大的顺序排序,这时候我们会想到用“冒泡法”,其思路是将相邻的数两两进行比较,如果符合要求则不变,不符合要求则交换,10个数就要比较9次,我们称为一轮,经过一轮比较后,只是相邻大小识别出来了,并没有真正实现排序,我们需要从头开始再比一轮,这样经过9轮比较才真正完成了排序,也就是需要比9*9=81次。这时我们就可以使用循环指令重复执行,程序就变得非常简洁了。1200梯形图没有FOR循环指令,但是我们可以用SCL语言进行编写,这样就使用FOR循环指令了。

编程步骤如下:首先创建两个包含10个INT元素的数组,数组1为排序前,数组2为排序后。 

图片


“下标”为数组变量,当下标为0时,数组2[下标]表示数组2[0],为1时表示数组2[1]以此类推。循环记录1和循环记录2为FOR循环要使用的变量,记录当前循环到第几次。交换中转用于交换时临时存储中转数据。程序编写如下:黑色字体为程序部分,//后红色字体部分为注释。#数组2 := #数组1;// 将数组1赋值给数组2,用数组2去进行排序,这样可以保留数组1中数据的完整性。FOR #循环记录1 := 0 TO 8 DO//与最下面END_FOR配对,表示从第0次开始到第8次结束,总共循环9次。    FOR #循环记录2 := 0 TO 8 DO//与倒数第二个END_FOR配对,表示从第0次开始到第8次结束,总共循环9次。        IF #数组2[#下标] < #数组2[#下标 + 1] THEN//如果前一个数小于后一个则交换。            #交换中转 := #数组2[#下标];//先将数组2[下标]赋值给交换中转变量。            #数组2[#下标]:=#数组2[#下标 + 1];//再将数组2[下标+1]赋值给数组2[#下标]            #数组2[#下标 + 1] := #交换中转; //再将交换中转赋值给数组2[#下标+1],这样就实现了数组2[下标]与数组2[下标+1]交换。        END_IF;        #下标 := #下标 + 1;//将下标偏移一位,实现下一组比较    END_FOR;    #下标 :=0;//比完一轮后跳出内循环,将下标清零重头再来下一轮比较END_FOR;完整程序如下图所示:

图片


展开全文
拨打电话 微信咨询 发送询价