目录
一.隧道
二.隧道运行结果
三、新增移位寄存器办法1 (由隧道置换为移位寄存器) )。
四.移位寄存器方式1的工作结果
5移位寄存器添加方法2 (直接添加移位寄存器) ) )
六.移位寄存器方式2的工作结果
七、别忘了移位寄存器一定要成对出现,否则程序会出现编译错误。
八.分析
接下来的两个源代码传递一个参数0,希望实现每次在三次循环中将3添加到循环体内时,输出的结果分配给数值表示控件的功能。 从代码的结果来看隧道和移位寄存器的区别。
一、在隧道1、前面板上创建数值显示控件
2、程序框图
) 2.1 )在程序框图中追加For循环,将循环次数设为3
) 2.2 ),程序框图在For循环的外侧添加常数0,在For循环的内部添加加号和常数3
) 2.3 )加号连接到数值显示控件
哇! 错误消息:连接了两个不同类型的端子。
右键单击自动索引隧道
打开下拉菜单,然后选择隧道模式为“最终值”
嗨,没错!
二、隧道运行结果运行观察运行结果,显示控件显示3。
三、新增移位寄存器办法1 (由隧道置换为移位寄存器) )。
请参阅下图。 程序框图中添加了隧道。 如何用移位寄存器替换隧道呢?
1、用移位寄存器替换循环隧道
2、FOR环右边框中的实心方块替换为移位寄存器
左侧的填充框是一个空心框,框中有一个向下箭头。
鼠标也会改变
成一个空心方块,方块内有一个向上的箭头。鼠标点击FOR循环右边边框上的实心方块(隧道)。
当鼠标点击FOR循环右边边框上的实心方块(隧道)后,FOR循环右边边框上的实心方块(隧道)变成移位寄存器(空心方块,方块内有一个向上的箭头)
四、移位寄存器方法1运行结果
运行一下观察运行结果,显示控件显示9。
五移位寄存器添加方法2(直接添加移位寄存器)
参见下图,程序框图中没有添加隧道,如何添加移位寄存器呢?
1、连线常数0和加法
2、FOR循环边框左边添加移位寄存器
鼠标点击FOR循环左边边框上的实心小方块
弹出下拉菜单,选择“替换为移位寄存器”
可以观察到FOR循环左边边框上的实心小方块变成空心小方块,小方块内有一个向下的箭头。FOR循环右边边框上自动添加了一个空心小方块,小方块内有一个向上的箭头。
3、连线加号到FOR循环右边边框上的空心小方块内的箭头。
4、连线FOR循环右边边框上的空心小方块内的箭头到最右边的数值显示控件。
六、移位寄存器方法2运行结果
运行一下观察运行结果,显示控件显示9。
七、切记:移位寄存器必定成对出现,否则程序会出现编译错误。
移位寄存器必定在FOR循环的左边边框上有一个,在FOR循环的右边边框上也要有一个。
八、分析
我们发现分别使用隧道和使用移位寄存器运行,得到的结果却迥然不同。隧道程序循环执行3次后输出的结果仍为3,而二次移位寄存器程序循环执行3次后如愿以偿的得到了9这个值,其原理在于:
(1)、隧道是一个局部变量值,每次进入循环体都会被循环体外部赋予一个初始值,所以即使循环执行了3次,但是每一次隧道的左入口的值都为0,在循环体内加3后,隧道的右出口值为3,即使执行N次也是这样。
(2)、移位寄存器的值稍微不同,每一次在循环体内执行,每次都会把右边移位寄存器出口的值用作左边入口的值,因此执行3次以后得到了9。
正如上文提到,熟悉C/C++的同学应该会想到了,这就是我们所熟悉的局部变量和静态局部变量的区别嘛!
是的,隧道相当于每次进来循环体之后把循环体外的值赋予循环体内的局部变量,所以不管循环体内执行几次,其结果也等同于只执行了一次。然而移位寄存器相当于加了static的静态局部变量,我们知道静态局部变量是不会压栈的,因此它的值会随着每次循环体的执行而往上累加。
总结:隧道就相当于C/C++中的循环体内的局部变量,移位寄存器就相当于C/C++中的循环体外的静态局部变量。