Question 1.亮灯
难度: ★☆☆☆☆
以组合框为输入条件,分别完成亮红灯、亮黄灯、亮绿灯、灯全灭
Question 2.波形图和波形图表的区别
难度: ★★☆☆☆
在波形图和波形图表中显示一个sin函数,sin函数没有定性要求
(注意: 波形图表输入是数字,而波形图输入是数组,要求波形图显示图像需要用到移位寄存器)
Question 3.波形图显示
难度: ★★☆☆☆
设计一个VI,显示一个正弦波电压测量结果。电压采样从0开始,每隔2ms采样一个点,共采样50个点。要求程序的显示能够反映出实际的采样时间及电压值
[Question3拓展] 波形图显示两组数据
设计一个程序,进行2组数据采集,但在相同的时间内,一个采集30点的数据,另一个采集了50点的数据,用波形图显示测量结果。
难度: ★★☆☆☆
Question 4.层叠移位寄存器
难度: ★★☆☆☆
计算
∑
n
=
1
5
n
\sum_{n=1}^5{n}
∑n=15n 、
∑
n
=
1
4
n
\sum_{n=1}^4{n}
∑n=14n 、
∑
n
=
1
3
n
\sum_{n=1}^3{n}
∑n=13n 和
∑
n
=
1
2
n
\sum_{n=1}^2{n}
∑n=12n
Question 5.二维数组的替换操作
难度: ★★☆☆☆
创建一个3*4的整数随机二维数组,随机数范围是0-10,然后实现对该数组的元素进行替换,对数组的某一行进行替换,对数组的某一列进行替换以及对数组的某一个子集进行替换
Question 6.二维数组的查找操作
难度: ★★☆☆☆
- 产生一个4*4的整数随机二维数组,随机数在0到100之间
- 找出数组中的最大值和最小值,以及他们的索引值
- 找出数组中是否存在数值88,若不存在,则输出"未找到!",若存在,则指出此数组元素位于数组中的位置
第一种方式:
第二种方式:
第一种方式不好理解,那就用第二种方式,因为在数组中找数用的是"搜索一维数组"的操作,而我们现在是二维数组,那么可以改变二维数组维度,将其变为一维,然后在一维数组中找目标数,找到目标数后会返回索引,问题是一维数组的索引值如何对应到二维数组的索引?
[Question6拓展] 二维数组排序
难度: ★★☆☆☆
产生一个4*4的整数随机数组,随机数在0到100之间。从小到大重排数组元素,以及从大到小重排数组元素
思路: 将二维数组转换为一维数组,即降维,然后对一维数组进行排序,最后将维数升回去
Question 7.二维数组的创建与提取
难度: ★★☆☆☆
用for循环产生4行100列的二维数组,数组成员如下:
1,2,3,…,100
100,99,98,…,1
6,7,8,…,105
105,104,103,…,6
从该数组中提取2行50列的二维数组,数组成员如下:
50,49,48,…,1
56,57,58,…,105
将这2个数组用数组显示控件显示在前面板上
我特意在前面放了一道需要用到一维数组反转操作的题目,这题应该能够立马想到吧
不用一维数组反转操作:
Question 8.字符串分割操作
难度: ★★☆☆☆
把IP地址"192.168.0.2"转换成数组,每个数组元素存储一小段IP,也就是说把192、168、0、2这四个数组元素分别存储在一个数组中
提示: 需要用到"匹配模式"
先通过简单例题来理解匹配模式
所以这道题答案是:
[Question8拓展] 反转字符串
难度: ★★☆☆☆
输入一段字符串,把此字符串反转,例如输入"ABCDEF"转换为"FEDCBA"
思路: 这题不算难,但细节很重要。正则表达式设置为空,偏移量设置为1,循环后加一个一维数组反转操作(这里有用到了一维数组反转操作,可见这操作的重要性),然后读取数组,将数组元素依次添加进字符串即可
假如我们并不知道有可以反转数组的操作,那我们只能逆顺序读取数组
然后我惊奇的发现,似乎把隧道模式改成索引,就行了…
Question 9.函数显示
难度: ★★★☆☆
- 创建一个VI,它用公式节点计算下列等式:
- y1 = x3 – x2 + 5
- y2 = m * x + b
- x的范围是从0到10。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结果
Question 10.跑马灯
难度: ★★★☆☆
利用顺序结构和循环结构写一个跑马灯,3个灯从左到右不停的轮流点亮,闪烁间隔由滑动条调节
① 循环结构和顺序结构:
② 循环结构和移位寄存器:
点击"高亮显示执行过程",可以看到执行过程便是FFT三个布尔变量的循环移位
看到这,我想问的是,如果我们没想到用三个移位寄存器来解决布尔变量移位问题,还有没有其他方法?
当然是有的,我们可以建立一个布尔数组,labview不是有一维数组循环移位的操作吗,那不就可以用来模仿布尔变量移位了?
我为什么要讲这么多种方法,其实是因为接下来的问题拓展
[Question 10拓展] 反向跑马灯
难度: ★★★☆☆
如图,实现正向跑马灯以及反向跑马灯,以及添加一个功能,那就是能够确定灯的移动位数
这题用数组的循环移位来解决会非常容易 (单纯用移位寄存器来解决这道题我没有想出什么方法)
思路: 从左向右亮灯便是布尔数组的循环右移,从右向左亮灯便是布尔数组的循环左移 (labview中一维数组循环移位是规定右移为正,循环左移为负)
直接上程序框图,耐心看就一定能够看懂
不知道你们有没有发现,当我们选择灯从左向右移动,而且选择每次移动3位,就会发现跑马灯变成反向了。
因为这里我们设置了四盏灯,从左向右间隔为1进行亮灯,其实就相当于从右向左间隔为3进行亮灯,如果是从左向右间隔为3进行亮灯,就相当于从右向左间隔为1进行亮灯,所以我们其实就可以把从左向右亮灯和从右向左亮灯两种操作转化为从左向右亮灯一种操作。
这道题我们还可以直接用公式结点来做,但是不建议用这个方法。
flag=1表示从左到右亮灯,flag=0表示从右向左亮灯
本来想用 << 和 >> 来表示移位的,但是一直报错,所以只好用定义来解:从左向右移位相当于乘以2的幂,从右向左相当于除以2的幂,这里得注意一点的是,a得用浮点数,最后才转换成整数
值得一提的是,labview中的状态机可以实现跑马灯操作,可以自行了解
Question 11.累加计数
难度: ★★★☆☆
利用事件结构实现在输入控件中,用户按下一个数字后,累加值就将新数字累加上去。例如按下34时,累加值为7;按下345时,累加值为12…
Question 12.输入密码
难度: ★★★★☆
在前面板输入密码,要求密码为全数字,当密码长度为6位时则程序停止(过滤事件)
Question 13.获取鼠标坐标
难度: ★★★★☆
屏幕鼠标按下,显示在屏幕的坐标。点击停止按钮,鼠标按下不显示坐标,关闭前面板退出程序