【SCL】实现简单算法 |
您所在的位置:网站首页 › 博图程序块排序 › 【SCL】实现简单算法 |
使用SCL语言实现一个冒泡排序的简单算法 文章目录目录 文章目录 前言 二、实现排序 1.读取存储器地址(PEEK)指令 2.编写程序 总结 前言本文我们来一起使用SCL来实现一个简单的算法——冒泡排序;它可以对少量数据进行从小到大或从大到小排序;另外它也是一种比较简单容易理解的一种排序方法。 一、冒泡排序 下面是在360摘抄的冒泡排序的含义和原理: 二、实现排序 这里我们在博图中建立编写环境然后创建数组和变量;这里我们可以直接定义一个起始值,然后排序;也可以输入相应的值,然后再排序; 1.读取存储器地址(PEEK)指令我们建立两个数组,一个存放初始值,一个存放排序值;这里我们想要在初始数组里面输入数值,在排序数组里面显示排序后的值 ;我们要用到scl中的读取存储器地址指令来完成; 第1个参数是选择读取哪一个区的地址,其中:16#81是输入,16#82是输出,16#83是位存储区 ,16#84是DB数据块 ;
16#81:Input 16#82:Output 16#83:位存储区 16#84:DB 第2个参数是DB块的序号,如果是数据块DB1,那么序号就是1,以此类推; 第3个参数是待读取的地址,这里我是用的数据块,所以地址是它的偏移量;
首先获取我们初始数组的数值传到排序数组中;#NP_TEMP 是一个整型变量,主要是用来获取数据块的偏移地址,每次循环+=2是因为是16位,也就是两个字节,对应相应的偏移量; #NP_TEMP := 0; FOR #i := 0 TO #len DO "数据块_1".排序值[#i] := WORD_TO_INT(PEEK_WORD(area := b#16#84, dbNumber := 1, byteOffset := #NP_TEMP)); #NP_TEMP := #NP_TEMP + 2; END_FOR; 这里再使用两个FOR循环,嵌套使用,对数组内的数值进行遍历,如果第一个大于第二个,就将第一个和第二个交换,然后以此类推; 第2for循环中每次减J是因为循环过一次之后最大的一个已经找到并排在最后了,所以第2次循环只要循环8次就够了,相同的道理,再一次循环之后仅次于最大的数也找到了,所以这里才每次-J; FOR #j := 0 TO #len-1 DO FOR #m := 0 TO #len - 1-#j DO IF "数据块_1".排序值[#m] > "数据块_1".排序值[#m + 1] THEN #t := "数据块_1".排序值[#m]; "数据块_1".排序值[#m] := "数据块_1".排序值[#m + 1]; "数据块_1".排序值[#m + 1] := #t; END_IF; END_FOR; END_FOR;效果: 总结 以上就是今天的所有内容啦! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |