【SCL】实现简单算法

您所在的位置:网站首页 博图程序块排序 【SCL】实现简单算法

【SCL】实现简单算法

2024-07-15 23:34| 来源: 网络整理| 查看: 265

使用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个参数是待读取的地址,这里我是用的数据块,所以地址是它的偏移量; 

 

2.编写程序

首先获取我们初始数组的数值传到排序数组中;#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