LabVIEW是一种易于学习的直观图形编程语言(也称为g语言),它拥有与现有装置外观相似的控制库(如手柄、仪表盘、温度计、波形图等),在构建美观的专业用户界面的同时,还内部提供了庞大的库(如数据收集、GPIB)

另外,由于它并非一种封闭的语言,而是具有强大的外部接口能力,可以实现与C/C++、Basic、Matlab等编程语言互通的能力,现在,LabVIEW不仅仅局限于虚拟仪器软件类的开发,而是已经发展成为了一种通用的、完善的、开放的高级编程语言。

LabVIEW语言中四大基本程序框架结构包括顺序结构、选择结构、循环结构和事件结构,其中,循环结构是用的比较多的一种结构,而与之配套使用的移位寄存器更是LabVIEW中的编程难点之一,这次通过一个例子给大家讲解一下For循环和移位寄存器的综合编程方法,帮助大家理解这个知识点。

示例说明

这次的例子是求解水仙花数。

先解释一下什么是水仙花数,水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,严格的定义水仙花数,是指一个3位数,它的每个位上的数字的 3次幂之和等于它本身。如371 = 3^3 + 7^3+ 1^3,则371是一个水仙花数。

编程思路

根据水仙花数的定义,可以理出下面的编程思路:

  1. 主框架使用For循环,循环次数为900次,在循环框上放置一个移位寄存器,其初始值是一个空数组
  2. 在循环内对100-999之间的数字,每个数字分别验证其百位、十位及个位数字的3次幂之和是否等于其本身的值,若数字是一个水仙花数,则将其添加到移位寄存器的数组中,否则,保持上次移位寄存器的值
  3. 当900次循环完成后,移位寄存器数组中的值即为所有的水仙花数的值

关键点处理

根据上面的编程思路,可以理出实现过程中的两个关键点:

1. 将一个三位数如何分解出单独的百位、十位及个位数字?

如对于数字371,如何分解成3个数字3、7、1?

  • 先对数字371除以10,其商为37,余数为1,则1即为个位数的值1
  • 对商37继续除以10,得商为3,余数为7,则7即为十位数的值,3为百位数的值

这里使用的关键函数是LabVIEW内置的函数“商与余数 (函数)”,参数说明情况如下图所示:

其返回参数中,x-y*floor(x/y)是余数部分,floor(x/y)是整数商部分。

2. 在For循环中如何保存获得的水仙花数?

在For循环中,使用移位寄存器存储所有的水仙花数组成的数组,其初始值为空数组,在For循环内若满足水仙花数的条件,则使用数组的插入函数,将该数插入到寄存器的数组中,否则,移位寄存器中的值保持原值。

这里使用的关键知识除移位寄存器外,还使用了“数组插入”函数,参数说明情况如下图所示:

该函数的目的是在n维数组中索引指定的位置插入元素或子数组。

程序主代码实现

根据上面的分析,最终使用For循环及移位寄存器实现的代码如下图所示:

运行后,“数组”控件中输出结果如下图所示:

即所求得的所有水仙花数为153、370、371、407四处数值。

结论

从框图程序中看出,这个例子中涉及到的知识点除For循环结构和与移位寄存器初始化及使用外,还包括了选择结构、常用数组函数的使用及LabVIEW中如何求商与余数等。

大家加关注并私信回复:LabVIEW9,可获取该文章对应的LabVIEW原程序下载。

欢迎加关注,共同交流。

相关推荐