使用博图SCL语言来实现先入先出排序
使用SCL完成一个先入先出排序
具体要求:最先输入的一个数值,最先输出出来,下面的数自动向前填充;
注:这里可能有两种理解:一是第一个输入的第一个出来,二是最后一个输入的第一个出来;
这里我们都来实现一下。
数组变量建立
记得在主程序调用函数块
编写实现
1.我们先要获取输入进来的值,然后存放到一个数组中;
首先判断输入的值是否大于0,然后进入for循环(这里以0..5为例),在for循环中判断数组中哪一个为0,找到后将输入值放在为0的数组中,然后清零退出循环。
第1步存放输入值就完成了。
IF #输入值 > 0 THEN
FOR #N := 0 TO 5 DO
IF #SC[#N] = 0 THEN
#SC[#N] := #输入值;
#输入值 := 0;
EXIT;
END_IF;
END_FOR;
END_IF;
2.第1个存进来的数第1个出来
输出按钮控制通断,for循环来遍历数组,如果找到数组不等于0(那么就是为真的),就将里面的值存放在一个变量中,然后将数组的值和按钮清零退出循环;
这里我们就找到了第一个存进来的数值。
IF #输出按钮 THEN
FOR #S := 0 TO 5 DO
IF #SC[#S] <> 0 THEN
#输出值 := #SC[#S];
#SC[#S] := 0;
#输出按钮 := 0;
EXIT;
END_IF;
END_FOR;
END_IF;
3.下面数组自动向前填充
我们输出过之后,数组中就为0了,那怎么才能补上去呢?
这里我们用for循环进行一个判断,判断里面是否有一个为0,如果为0就将下一个数组的数补充上去,以此类推,直至填充完成。
(注:这里I+1会导致数组越界,所以上面的数组数量要再加1才可以)
FOR #I := 0 TO 5 DO
IF #SC[#I] = 0 & #SC[#I+1]<>0 THEN
#SC[#I] := #SC[#I + 1];
#SC[#I + 1] := 0;
END_IF;
END_FOR;
4.触摸屏演示
5.这里我们在看一下第2种理解,最后输入的最先输出
这里我们只要将输出时的循环顺序修改为逆序就可以了,S从5到1,来开始循环。
以上就是先入先出排序法的全部内容了。