文档库 最新最全的文档下载
当前位置:文档库 › 虚拟仪器图形编程LabVIEW实验教材(三) 数组、簇和图形

虚拟仪器图形编程LabVIEW实验教材(三) 数组、簇和图形

虚拟仪器图形编程LabVIEW实验教材(三)    数组、簇和图形
虚拟仪器图形编程LabVIEW实验教材(三)    数组、簇和图形

第三章数据类型:数组、簇和波形

3.1概述

数组是同类型元素的集合。一个数组可以是一维或者多维,

如果必要,每维最多可有231-1个元素。可以通过数组索引访问

其中的每个元素。索引的范围是0到n – 1,其中n是数组中

元素的个数。图3-1所显示的是由数值构成的一维数组。注意

第一个元素的索引号为0,第二个是1,依此类推。数组的元素

可以是数据、字符串等,但所有元素的数据类型必须一致。

图3-1数组示意图

簇(Cluster)是另一种数据类型,它的元素可以是不同类

型的数据。它类似于C语言中的stuct。使用簇可以把分布在流

程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤

程度。减少子VI的连接端子的数量。

波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。

3.2数组的创建及自动索引

3.2.1创建数组

一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。

如果需要用一个数组作为程序的数据源,可以选择

Functions?Array?Array Constant,将它放置在流程图中。然后

再在数组框中放置数值常量、布尔数还是字符串常量。下图显示

了在数组框放入字符串常量数组的例子。左边是一个数组壳,中

间的图上已经置入了字符串元素,右边的图反映了数组的第0个

元素为:”ABC”,后两个元素均为空。

图3-1数组的创建

在前面板中创建数组的方法是,从Controls模板中选择

Array & Cluster,把数组放置在前面板中,然后选择一个对象

(例如数值常量)插入到数组框中。这样就创建了一个数值数组。

也可以直接在前面板中创建数组和相应的控制对象,然后将

它们复制或者拖曳到流程图中,创建对应的常数。

还有很多在流程图中创建和初始化数组的方法,有些功能函

数也可以生成数组。

3.2.2数组控制对象、常数对象和显示对象

通过把数组与数值、布尔数、字符串或者簇组合在一起,可以在前面板和流程图中创建任何一种控制对象、常数对象和显示对象。数组元素不能是数组、图表或者图形。如果您想查看一些数组的例子,请查看Examples\General\arrays.llb中的例子。

3.2.3自动索引

For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。这些功能称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作――数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。

在默认情况下,对于每个连接到For循环的数组都会执行自

动索引功能。可以禁止这个功能的执行,方法是用鼠标右键单击

通道(输入数组进入循环的位置),在快捷菜单中选择Disable

Indexing。

练习3-1创建一个自动索引的数组

目的:使用 For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。

前面板

图3-2练习3-1的面板

1.打开一个新的前面板。

2.选择Controls?Array & Cluster,在前面板

中放置一个数组。设置它的标签为Waveform Array。

3.选择Controls?Numeric,在

数组框中插入一个数字式显示对象。如右图所示。它用于显示数

组的内容。

4.选择Controls?Graph,在前面板中放置一个波形图。

设置它的标签为Waveform Graph。

5.隐藏图例和模板。

6.用鼠标右键单击图形,并在快捷菜单中取消选中Y

Scale?Autoscale Y,禁止自动坐标功能。

7.使用文本工具,把Y轴的范围改为-0.5到1.5。

流程图

8.按照下图创建流程图。

图3-2练习3-1的流程图

●由Functions?Select a VI…寻找

LabVIEW\activity目录下的Generate Waveform

VI,它的作用是返回波形中的某一点。这个VI

需要输入一个索引,我们将循环周期连接到这个

输入。

●注意Generate Waveform VI连出来的连线在循环边界

变成一个数组时会变粗,正是在这个边界处形成了一维数组。

●For循环会自动累计边界内的数组。这种功能叫做自动

索引。在这个例子中,连接到循环计数输入的数值常数令For

循环创建了一个由100个元素组成的数组。

●Bundle函数(Functions? Cluster)——

将图块中的各个组件组合成一个簇,在正确连接以

前需要改变该函数的图标的大小。将移位工具放在

图标的左下角。变形工具会变成如左图所示,拖曳鼠标直到出现

第三个输入端子。

●数值常数(Functions?Numeric)——三个数值常数用

于设置For循环执行的周期数N=100,初始X=0和delta X=1。

9.从前面板执行该VI。该VI将把自动索引后的波形图数

组显示在波形图中。

10.把 X的delta值改为0.5,X的初始值改为20。再次执

行该VI。注意,波形图现在同样显示100个点,而每个点的初

始值为20,X的delta值为0.5(见X轴)。

11.只需在显示器中输入元素的索引号就可以查看波形数

组中的任何元素。如果输入的数比数组的元素个数大,那么显示

器将变暗,表示您没有为该元素设置索引。

如果需要一次查看多个元素,可以通过改变数组显

示对象的大小来实现。把定位工具放置在数组框的右下

角。工具将变成右图所示的变形工具。当工具变形时,用鼠标拖

曳数组的右边或者下边。数组现在就可以按照元素索引的上升顺

序显示多个素,以某个与指定索引对应的元素开始,如下图所示。

图3-3练习3-1中多个数组元素的同时观察

在前面的流程图中,您为波形图指定了初始的X值和delta

X值。默认的X初始值是0,delta X 值是1。这样,也可以把

波形数组直接连接到波形图端子,而无需指定初始的X值和

delta X值,如图3-4所示。

图3-4练习3-1使用默认X及Delta X时简化后的流程图

12.按上图删除 Bundle功能函数和它所连接的常数对象。

方法是用移位工具选择该功能函数和连接的常数对象,按下

。再选择Edit?Remove Bad Wire s。按照上图完成流程

图的连线。

13.执行该VI。注意初始的X值是0,delta X值是1。

多图区图形

可以创建含有多条曲线的图形,方法是创建一个数组,用它

来汇集传给单图区图形的类型的数据元素。

图3-5 练习3-1多图区图形的流程图

14. 按照上图创建流程图。

● 正弦函数

(Functions?Numeric?Trig onometric )——在这

里,它用于在For 循环中创建一个由数据点组成的数组,表示一

个正弦波周期。

● Pi 常数(Functions?Numeric?Additional

Numeric Constants )

● Build Array (Functions?Arra y )——在

这里,它用于创建合适的数据结构(一个二维数组),

在波形图中绘制两条曲线。。用移位工具拖曳边角

可以增大该函数的面积,创建两个输入端子。

15. 返回前面板,执行该 VI 。注意同一个波形中的两个图

区。默认情况下,它们的X 初始值都是0,delta X 初始值都是

1。下图是该程序的运行结果(前面板未改动)。

16. 把该VI 保存为LabVIEW\Activity 目录中的Graph

Waveform Arrays.vi 。

17. 可以修改图形中的某个图区的外观。方法是,用鼠标右

键单击这个图形,再从弹出菜单选择对应的图例。

Array

图3-6 练习3-1多图区图形的面板显示

练习 3-1 结束。

在上面这个例子中,由于计算端子连接了一个值为100的常

数对象,所以 For 循环将执行100次。下面这个例子显示了另

外一种控制循环执行次数的方法。

更详细的例子建议调阅Examples》Fundamentals 》Graphs

and Charts》Graph Examples》Waveform Graph例子。

练习3-2对输入数组使用自动索引功能

目的:打开并执行一个VI,它将在一个For循环中使用自动索引功能处理一个数组。

1.选择File?Open…,打开

Examples\General\arrays.llb中的Separate Array Values

VI 。

2.打开流程图。下面的示意图显示的是在TRUE和FALSE

时的情况。

图3-7练习3-2的流程图

注意,Input Array引出的连线与For循环外的粗线不同,

表示这是一个数组,而循环内部的细线则表示这是一个数组元

素。数组元素在每个循环期间将自动编号。

用自动索引功能设置 For 循环的计数器

注意,计数器端子还没有连线。当您对某个进入For

循环的数组使用自动索引功能时,循环就将根据数组的大小执行

相应的次数,这样就无需连接某个值到计数器的端口。如果对一

个以上的数组使用自动索引功能,或者在使用自动索引功能之外

还需要设置计数器时,实际的循环次数将是其中最小的数。

3.执行该VI。在输入的八个数中,可以看到4个属于正

数数组,另外4个属于负数数组。

4.从流程图中将一个值为5的常数对象连接到For 循环

的计数器端子。执行该 VI。可以看到尽管输入数组仍然有八个

元素,但是3个位于正数数组,另外2个位于负数数组。这说明,

如果设置了N并开启了自动索引功能,那么实际循环的次数将取

较小的数。

5.关闭该VI,不要保存任何修改。

注:练习3-2的算法说明

下面是一段伪代码,解释上面的算法,假定输入数组为A(已

赋值),B(正数)、C(负数)。Sbr 、Scr分别是与B数组、

C数组对应的右寄存器数组,Sbl 、Scl分别是与B数组、C数

组对应的左寄存器数组,size运算为测数组实际大小,ins运算

为将一个数插入数组中最左边的空位。

练习3-2结束。

3.3数组功能函数

LabVIEW提供了很多用于操作数组的功能函数,位于

Functions?Array中。其中包括Replace Array Element,、Search 1D

Array、Sort 1D Array、Reverse 1D Array和Multiply Array

Elements等等。

创建数组——Build Array函数(Functions?Array),用于根据标量值或者其他的数组创建一个数组。

开始时,Build Array函数具有一个标量输入端子。您可以根据需要向该功能函数中加入任意数量的输入,输入可以是标量或者数组。如果要添加其他的输入,用鼠标单击函数的左侧,在弹出菜单中选择Add Element Input或者Add Array Input。还可以用变形工具来增大节点的面积(把移位工具放置在某个对象的边角就会变成变形光标)。也可以使用变形光标或者选择Remove Input来删除输入。

下图显示了利用流程图中的常数对象的值创建和初始化数组的两种方法。左侧的方法是,将5个字符串常数放入一个一维字符串数组中。右侧的方法是,将三组数值常数放入三个一维数值数组,再将这三个数组组成一个二维数组。这样最后产生的是一个3x3的数组,三列分别是3, 4, 7; –1, 6, 2; 5, –2, 8.。

还可以通过结合其他的含有标量元素的数组来创建数组。例如,假设有两个数组,三个标量元素,可把它们组成一个新的数组,顺序是:数组1,标量1,标量2,数组2,标量3。

●初始化数组(Initialize Array)——用于创建所有元素值都相等的数组。下图

中,该功能函数创建了一个一维数组。

元素输入端子决定每个元素的数据类型和数值,维长度输入端子决定数组的长度,例如,假设元素类型是长整型,值为5,维长度为100,那么创建的数组是一个一维的、由100个值为5的长整型元素组成的数组。也可以从前面板控制端子、流程图常数或者程序其他部分的计算结果得到输入。

创建和初始化一个多维数组的方法是,用鼠标右键单击函数的右下侧,在弹出菜单中选择Add Dimension。还可以使用变形光标来增大初始化数组节点的面积,为每个增加的维添加一个维长度输入端子。也可以通过缩小节点的方法来删除维,即从函数的弹出菜单中选择Remove Dimension,或者使用变形光标。下面的示意图显示了怎样初始化一个三维数组。

如果所有的维长度输入都是0,该函数会创建一个具有指定数据类型和维数的空数组。

●数组大小——Array Size函数,返回输入数组中的元素个数。

●数组子集(Array Subset)——选取数组或者矩阵的某个部分。

该函数可以返回从某个指针开始的部分数组,并包括了长度元素。下图显示了一些数组子集的例子,注意,数组索引从0开始。

●索引数组(Index Array)——用于访问数组中的某个元素。

下图显示了一个索引函数的例子,它用于访问数组中的第三个元素。注意,因为第一个元素的索引为0,所以第三个元素的索引是2。

将一个二维数组与Index Array函数相连,Index Array就会含2个索引端子。将一个三维数组与Index Array函数相连,Index Array就会含3个索引端子。余类推。可以使用的索引端的符号是一个黑方快,被禁止使用的索引端(Disable Indexing)是一个空心的小方框。当给一个被禁止使用的索引端连接上一个Constant 或Control是它会自动变为黑方快,即变为可以索引,相反原来一个可以使用的索引端上连接的Constant 或Control被删去时,索引端符号会自动变为空心的小方框,即变为禁止使用。

也可以按照任何维的组合提取子数组,下面的示意图显示了怎样从一个二维数组中提取一个一维的行或者列数组。

还可以从一个三维数组中提取一个二维数组,方法是禁止两个索引端子,或者通过禁止一个索引端子提取一个一维数组。下图显示了从三维数组提取数组的各种方法。

下面的规则对使用剪切数组进行了规定:

输出对象的维数必须等于被禁止的索引端口的数目。例如

0个索引端口被禁止=标量元素

1个索引端口被禁止=二维元素

2个索引端口被禁止=三维元素

启动的端子所连接的数值必须指定输出元素。

这样,您就可以理解,上图中左下方的例子的作用是,利用0列和3行的所有元素产生一个一维数组,而右上方的例子的作用是利用第一帧中的所有元素产生一个二维数组。新的第0个元素是与原有元素最近的元素。

练习3-3使用创建数组功能函数

目的:使用创建数组函数,把一些元素和输出组织成一个更大的数组。

图3-8练习3-3的面板和框图

1.按照图3-8创建一个前面板。

2.从Controls?Numeric模板中选择一个数字控制对象放

置在前面板中,设置它的标签为scalar 1。

3.复制并粘贴该数字显示对象,创建两个新的对象,并分

别设置它们的标签为scalar 2和scalar 3。

4.创建一个数字控制对象的数组,设置它的标签为array

1。复制并粘贴它,创建一个新的数组,设置它的标签为array 2。

5.在array 1、scalar 1、 scalar 2、scalar 3、array

2中输入数值1到9。

6.创建流程图。选择Functions?Array,在流程图中放置

一个Build Array功能函数。用定位工具增大函数额面积,以容

纳5个输入。

7.把数组和标量与Build Array连接起来。创建输出的一

维数组,它由 array 1、scalar 1、 scalar 2、array 2、scalar

3中的元素所组成,如图所示。

8.执行该VI。可以看到array 1、scalar 1、 scalar 2、

scalar 3、array 2中的数值出现在同一个一维数组中。

9.保存该VI为LabVIEW\Activity目录下的Build

Array.vi。

练习3-3结束。

3.4什么是多态化(Polymorphism)?

多态化是指一种函数功能,即可以协调不同格式、维数或者

显示的输入数据。大多数LabVIEW的函数都是多态化的。例如,

图3-9给出了Add函数的一些多态化组合。

图3-9多态化组合的例子

第一个组合中,两个标量相加,结果还是一个标量。第二个

组合中,该标量与数组中的每个元素相加,结果是一个数组。数

组是数据的集合。第三个组合中,一个数组的每个元素被加到另

一个数组的对应元素中。您还可以使用其他的组合,例如数值簇

或者簇数组。

可以把这些准则应用到其他的G语言函数或者数据类型。G

语言函数对于各种情况都具有多态性功能。有些函数接受数值和

布尔输入,而有些函数接受其他任何数据格式的组合。如果您想

了解更多关于多态化的知识,请参阅Online

Reference?Function and VI Reference。

3.5簇

3.5.1创建簇控制和显示

在前面板上放置一个簇壳(Cluster shell)就创建了一个簇。

然后你可以将前面板上的任何对象放在簇中。例如数组,你也

可以直接从Control 工具板上直接拖取对象堆放到簇中。一个簇

中的对象必须全部是Control,或全是Indicator,不能在同一个

簇中组合Control与Indicator,因为簇本身的属性必须是其中之

一。一个簇将是Control或Indicator,取决于其内的第一个对象

的状态。如果需要可以使用工具重置簇的大小。右图所示是一

个含4个Control的簇。也可以在流程图上用类似的方法创建簇

常数。

如果你要求簇严格地符合簇内对象的大小,可在簇的边界上弹出快速菜单选择自动定义大小(Autosizing)

簇的序(Order)

簇的元素有一个序,它与簇内元素的位置无关。簇内第一个元素的序为0,第二个是1,等等。如果你删除了一个元素,序号将自动调整。如果你想将一个簇与另一个簇连接,这两个簇的序和类型必须同一。

如果想改变簇内元素的序,可在快速菜单中选择ReOrder Controls In Claster,这时会出现一个窗口,在该窗口内可以修改序。

3.5.2 使用簇与子VI 传递数据

一个VI 的连接窗口最大有28个端子,如果你不希望使用全部28个端子传递数据,这既烦琐又易出错。通过把控制或显示对象捆绑成一个簇的方法,仅使用一个端子就可以实现该功能。

● 捆绑(Bundle )数据

Bundle 功能将分散的元件集合为一个新的簇,或允许你重置

一个已有的簇中的元素。可以用位置工具拖曳其图标的右下角以

增加输入端子的个数。最终簇的序是取决于被捆绑的输入的顺序。

右图中Bundle 图标中部的Claster 端子用于用新元素重置原簇中的元素。

分解(Unbundle )簇

Unbundle 功能是Bundle 的逆过程,它将一个簇分解为若干分

离的元件。如果你要对一个簇分解,就必须知道它的元素的个数。

LabVIEW 还提供一种可以根据元素的名字来捆绑或分解簇的方

法,稍后介绍。

练习 3-4 簇

目的:学习创建簇、分解簇,再捆绑簇并且在另一个簇中显示其内容。

图3-10 练习3-4的面板和框图

1.打开前面板,创建一个簇壳(Array & Cluster palette ),标签改为Input Cluster ,拖曳至

适当大小。

2.在这个簇壳中放置一个数字Control ,两个布尔开关,和一个串Control 。

3.仿照以上步骤,创建Output Cluster 如上。注意将各Control 改为相应的indicator 。

4.用快速菜单查看两个簇的序是否一致,若有差别,改之。

5.在前面板上设置一个[STOP]按钮。注意其缺省值为FALSE ,不要改变它的状态。 6.建立如上面所示的流程图。注意在[STOP]按钮与循环条件端子之间接入了一个NOT 函

数,因为按钮缺省值为FALSE ,经NOT 函数后变为TRUE ,这

就意味着当按钮状态不变时,循环继续执行,相反一旦按钮动作,

则循环终止。在6i 版本中这个设置可以简化,不必使用NOT 函

数,直接将[STOP]按钮与循环条件端子相连,然后用鼠标右键点

击循环条件端子,选择stop if true 即可。结果如右图所示。

7.返回前面板并运行VI 。在输入簇中输入不同的值观察输出。

8.关闭并保存程序。Cluster Exercise.vi

练习 3-4 结束

3.5.3 用名称捆绑与分解簇

有时你并不需要汇集或分解整个簇,而仅仅需要对其一、两个元素操作。这时你可以用名称来捆绑与分解簇。在Cluster 工具模板中除了Bundle 及Unbundle 功能外,还提供有Bundle By Name 和Unbundle By Name 功能。它们允许根据元素的名称(而不是其位置)来查询元素。与Bundle 不同,使用Bundle By Name 可以访问你需要的元素,但不能创建新簇;它只能重置一个已经存在的簇的元素,同时你必须给Bundle By Name 图标中间的输入端子一个输入以申明要替换其元素的簇。Unbundle 可返回指定名称的簇元素,不必考虑簇的序和大小。例如,如果你想重置上例中Boolean 2的值,就可以使用Bundle By Name 功能而不必担心簇的序和大小。与此类似如果你要访问串的值,可以使用Unbundle By Name 功能。

图3-11 用名称操作簇

在上面的例子中,Cluster Control 中有两个元素,一个是数据类型(名称是Numeric ),另一个是字符串型(名称是String ),另一个控制是字符串“ABCD ”,框图如右所示,运行该程序,即可将簇内的字符串值重置。(本例中为了使Bundle By Name 的输入端由Numeric 变为String ,需使用快速菜单中的Select Item 项操作。)

3.5.4 数组和簇的互换

有时你会发现,将数组变为簇(或者相反)很方便。尤其是因为LabVIEW 包括的关于数组的操作功能多于簇。例如,前面板上有一个多按钮的簇,你希望颠倒这些按钮值的序。好了,Reverse 1D Array 功能正好可用,但是它仅可用于数组。这没关系,你可以使用功能Cluster to Array 将簇转换为数组,使用Reverse 1D Array 切换开关的值,最后再利用Array

to Claster 变换回簇。

3.6Waveform数据类型

在数据采集和信号分析中经常要遇到波形数据,在LabVIEW 6i中增加了Waveform数据类型,使得波形的描述更加简洁。Waveform数据类型包含了波形的数据(Y)、起始时刻(t0)和步长ΔX,使用Waveform 模板的Build Waveform 函数可以建立一个波形。许多用于数据采集和波形分析的VI和函数的缺省状态都接受或返回Waveform数据类型。当你将一个Waveform数据类型连接到Waveform Graph或Chart时,会自动画出相应的曲线。Waveform 数据类型是根据原有的数据类型进一步“打包”组合而成,这种打包也不可避免地带来一些负作用,有时还需要对Waveform数据类型“解包”。有关这一数据类型的函数或VI在Functions?Waveform和Analyze之中。

图3-12使用Waveform的波形发生例子

图3-12是一个使用Waveform函数产生正弦波的例子。其中仅仅调用了Sine Waveform一个函数,只要将有关参数指定,就可产生正弦波。Sine Waveform实际上是一个子VI,点击其图标,就可看到下层的程序,还是比较复杂的。在LabVIEW 6I以前的版本中用户就需要那样去编程。

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

(完整word版)LabVIEW编程基础(中)

LabVIEW的基本控件与基本函数 LabVIEW基本控件:数值、布尔、字符串与路径、数组与簇、图形、枚举1、数值:数值输入控件与数值显示控件(数值输入控件有增量/减量按钮;输入为白色背 景,输出为灰色背景) 默认数据类型为:双精度,橙色。 2、布尔:值默认为False,图标为绿色。 布尔控件的机械动作属性 单击时转换:按下按钮时改变状态,再次单击后恢复原状态。与VI是否读取控件无关。(可赋值恢复)类似开关按钮 释放时转换:按下按钮时保持当前状态,直到释放按钮,再次单击后恢复原状态。与VI是否读取控件无关。(可赋值恢复)类似开关按钮 保持转换直到释放:按下按钮时改变状态,直到释放按钮,,再次单击后恢复原状态。与VI 是否读取控件无关。(可赋值恢复)。类似开关按钮 单击时触发:按下按钮时改变状态,LabVIEW再次读取控件值后返回原状态。 释放时触发::按下按钮时保持当前状态,释放时改变状态,LabVIEW再次读取控件值后返回原状态。 保持触发直到释放:按下按钮时改变状态,直到释放按钮,LabVIEW再次读取控件值后返回原状态。

3、字符串与路径:(字符串输入控件与字符串显示控件),粉色。 4种显示方式(正常显示、’\’代码显示、密码显示、十六进制显示) 4、数组:依据加入的控件类型同样分为输入控件与显示控件 LabVIEW的数组以索引号0表示数组的首个数据。 增加数组维度的方法:(1)索引框的快捷菜单中->增加维度 (2)直接向下拖动索引框 (3)属性对话框->外观选项卡->维 数组中的元素为同类型的控件,可以是各种类型的控件,但不能是数组的数组。数组的多态性: 5、簇:依据加入的控件类型同样分为输入控件与显示控件 簇本身的属性:重新排序簇中控件、自动调整大小(无、调整为匹配大小、水平排列、垂直排列) 使用簇结构时,尽可能的使用:严格自定义类型。 错误簇:状态(布尔)、代码(数值输入)、源(字符串输入)

虚拟仪器LabVIEW实验报告

实验报告一 课程名称虚拟仪器 实验项目熟悉编程环境与基本编程操作 实验仪器计算机 系别: guangdian 专业: 班级/学号: 学生姓名: 实验日期:2011年3月 成绩: _____________________ 指导教师: ____________________

实验一熟悉编程环境与基本编程操作 一、实验目的 1.理解LabVIEW的运行机制,熟悉LabVIEW编程环境。 2.掌握基本编程操作,包括VI程序的创建、编辑、运行与调试。 3.理解LabVIEW模块化编程思想,掌握子VI的创建、编辑及调用。 二、实验仪器及材料 主要设备有计算机, LabVIEW8.5软件。 三、实验内容及步骤 教材第82—83页练习4.2,创建VI后保存为Thermometer.vi。 1.打开一个新的前面板 2.从控件菜单选择一个温度计放到前面板 3.在温度计上用右键单击设定一个精确的温度值,选择Visible》Digital Display 4.将VI保存为Thermometer.vi 教材第107—108页练习5.2,打开练习4.2所创建的VI,将其转变成一个子VI。 1打开4.2创建的Thermometer.vi 2.为该VI创建一个图标,从VI图标窗格选择Edit Icon…,单击OK返回主VI

3从图标弹出菜单中选择Show Connector创建连接器。 4将端子指派给温度指示器,使用Writing工具单击连接器端子,端子就会变成黑色,然后单击温度计指示器。 5在温度计指示器的弹出菜单选择Description and Tip…为温度指示器编制文档 6选择File》Save将修改保存。 四、收获与体会

数据结构实验报告-图的遍历

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

实验8MATLAB图形用户界面设计实验报告

实验8 MATLAB图形用户界面设计实验报告实验报告 课程名称:MATLAB应用成绩: 实验项目名称:MATLAB图形用户界面设计实验时间:11.6 指导教师(签名): 班级:XXXXX 姓名:XXXXX 学号:XXX 实验目的: 1. 熟悉MATLAB的菜单设计方法 2. 熟悉MATLAB的主要控件使用方法 3. 熟悉MATLAB的GUI设计流程 实验环境: MATLAB 7.1 实验内容及过程: 简单计算器的设计:在MATLAB GUI的实验环境中,通过MATLAB图形用户界面设计的方法,设计一个 简单的计算器,以实现简单数据的退出、清屏、删除、四则运算等基本功能。 实验过程、结果及分析:

计算器代码: function varargout = jsq(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 第 1 页共 6 页 'gui_OpeningFcn', @jsq_OpeningFcn, ... 'gui_OutputFcn', @jsq_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

数据结构图的遍历实验报告

实验项目名称:图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。 二、实验容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。 三、实验仪器与设备 计算机,Code::Blocks。 四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。 五、实验程序及结果 #define INFINITY 10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include

typedef struct ArCell{ int adj; }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char name[20]; }infotype; typedef struct { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(MGraph *G,char* v) { int c = -1,i; for(i=0;ivexnum;i++) if(strcmp(v,G->vexs[i].name)==0) { c=i; break;} return c;} MGraph * CreatUDN(MGraph *G)//初始化图,接受用户输入{ int i,j,k,w; char v1[20],v2[20]; printf("请输入图的顶点数,弧数:"); scanf("%d%d",&G->vexnum,&G->arcnum);

Java基础实验报告-图形用户界面设计

南京工程学院 实验报告 课程名称 JAVA基础 实验项目名称图形用户界面设计 实验学生班级 实验学生姓名 学号 同组学生姓名 实验时间 实验地点 实验成绩评定 指导教师签字年月日

一、实验目的和要求 1.掌握Java Swing组建的使用方法,包括窗口、框架、对话框、面板、文本编辑框、按钮、组合框等多种布局方式,掌握窗口菜单和快捷菜单设计方式。 2.理解委托时间处理模型,掌握不同组件、不同事件的事件处理方法,设计出能够响应事件的Java图形用户界面。 3.熟悉在组件上绘图的方法。 二、实验题目 用表格存储并显示个人所得税税率表,给定一个月收入值,计算应缴的个人所得税。 三、实验方法与步骤(需求分析、算法设计思路、流程图等) 算法设计思路:本次实验题目为计算个人所得税,所以本人从网上找到了国家最新的税收政策,以下为截图:

因此,我设计了以下核心算法 public void actionPerformed(ActionEvent e) { if(e.getSource()==button_b) { double wage=Double.parseDouble((String)text_wage.getText()); double tax = 0; if(wage<=3500) tax=0; if(wage>3500&&wage<=5000) tax=(wage-3500)*0.03; if(wage>5000&&wage<=8000) tax=(wage-3500)*0.1-105; if(wage>8000&&wage<=12500) tax=(wage-3500)*0.2-555; if(wage>12500&&wage<=38500)

LabVIEW中的数组操作函数

L a b V I E W中的数组操作 函数 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

LabVIEW中的数组操作函数 现在我们已经了解了中的的一些基本概念(包括了前面这几篇文章、、)。在这篇文章里面我们接着讨论一下如何操作数组了。在的Functions(函数)工具框的Programming>>Array子工具框中有很多操作数组的函数。(我们在使用数组的时候要记住中的数组元素的索引是从0开始的,也就是说它的第一个元素的索引为0,第二个元素的索引为1,以此类推。)我们将在这里讲解常用的数组操作函数,LabVIEW中数组函数的工具框如下图所示: ?初始化数组函数将创建并按照你设定的值来初始化N维数组。通过将光标置于该函数最下方边框,出现拖动光标后向下拖动就可以为该数组增加维数。该函数适用于为已知大小的数组分配内存或者是初始化数组类型数据的。 该函数如下图所示: ?数组大小函数会返回输入数组的元素的个数。如果输入的数组为N维的多维数组,该函数就会返回有N个元素的一维数组,每个元素按顺序对应每维的元素的个数。该函数如下图所示: ? ?创建数组函数(BuildArray)可以根据你的设置来将两个数组连接或合成为一个数组以及为现有数组添加新的元素。当第一次将该函数放到LabVIEW的框图中的时候,该函数可能像下图左侧所示是个非常简单的图标。你可以通过拖动该函数下边框的图标或者是通过在该函数上点击右键从右键菜单中选择AddInput来为该函数增加输入参数的个数,如下图右侧所示。该函数可以有两种类型的输入:数组以及数组元素,该函数可以从数组以及单值的输入来组装一个新的数组。 ? 创建数组函数的输入会根据你连接到输入端点的数据类型自动调整为元素类型或数组类型的输入。在更高级的应用中,该函数还可以创建多维数组或者是为多维数组增加新的数组元素。为多维数组增加元素时,该元素必须是比要增加的数组小一维的数组。例如,为二维数组添加的新元素必须是一个一维数组。也可以将多个一维数组作为元素连接到这个函数的输入端点上来创建一个新的二维数组,每个一维数组就成为这个二维数组的一行。如果你只是将这些一维数组接续为一个新的一维数组的话,就需要在该函数上点击鼠标右键并从右键菜单中选择ConcatenateInputs选项。?子数组函数会按照该函数输入的起始索引以及长度返回输入数组的一部分。该函数如下图所示: ? 在使用这个函数的时候一定要记住LabVIEW中数组的索引是从0开始的,第一个数组元素的索引是0,而不是1。?获取数组元素函数(IndexArray)可以用来访问数组中的某个特定元素。该函数如下图所示。 ? 对于一维数组来说,只要输入要访问的元素的索引就可以在对应的输出得到该元素的值;不过对于二维数组来说,通过输入特定元素的行号、列号就可以访问到该元素的值,如果你想获得某行或某列的全部值,那么在输入端只输入行号或列号即可。 ?删除部分数组函数(DeleteFromArray)可以删除数组中从某一索引号开始某设定长度的部分并返回删除该部分后的数组以及被删除的部分数组。该函数如下图所示:

数据结构实验 - 图的储存与遍历

一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 三、附录: 在此贴上调试好的程序。 #include #include #include ????????????????=010******* 010101000100010A

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

Java图形用户界面实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:图形用户界面 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:一、实验目的 了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。 二、实验要求 1. 掌握使用布局管理器对组件进行管理的方法。

2. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3. 掌握编写独立运行的窗口界面的方法。 4. 掌握组件的使用方法。 5. 了解对话框的使用方法。 三、实验内容 (一)算术测试。 实验要求: 编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确; ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过 ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答 案;MainClass是软件的主类。 程序模板: public class Teacher { int numberOne,numberTwo; String operator=""; boolean right; public int giveNumberOne(int n) { numberOne=(int)()*n)+1; return numberOne; } public int giveNumberT wo(int n) { numberTwo=(int)()*n)+1; return numberTwo; } public String giveOperator() { double d=(); if(d>= operator="+"; else operator="-"; return operator; } public boolean getRight(int answer) { if("+")) { if(answer==numberOne+numberTwo) right=true; else right=false; }

labview实验报告

LabVIEW课程设计 报告书 班级 学号 姓名 一、基础题

1、用labview的基本运算函数编写以下算式的程序代码: 首先在前面板创建一个数值输出控件,然后在程序框图中按照上图连接线路,点击运行,程序结果。 2、利用摄氏温度与华氏温度的关系C = 5(F ?32) / 9编写一个程序,求华氏温度 (F)为32, 64, 4, 98.6 , 104, 212时的摄氏温度。

在程序前面板创建一个数值输入控件和一个数值显示控件,在程序框图中添加一个公式节点,添加一个输出和一个输入分别输入和显示控件项链,在公式节点框图中输入温度转换公式,然后在面前扮输入相应的温度点击运行,得到相应的结果。 3、创建一个2行3列的二维数组控制件,为数组成员赋值如下: 00 .600.500.400.300.200.1 在前面板创建一个数组显示控件,然后将1、2、3创建成数组第一行,4、5、6创建成数组第二行,再将两行创建成一个两行三列的二位数组,点击运行显示输 出结果。 4、用数组创建函数创建一个二维数组显示件,成员为:

1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3 编程将上述创建的数组转置为: 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 1 5 6 1 2 6 1 2 3 先在面前板上创建一个上图这样的数组。再创建两个显示数组(一个为显示数组,另一个为转换后数组),在程序框图上面按照下图连线,在原数组和转换后数组之间接一个“二维数组转制”, 点击运行后显示为:

5、创建一个簇控制件,成员分别为字符型控制件姓名,数值型控制件学号,布 尔型控制件注册。从这个簇控制件中提取出簇成员注册,显示在前面板上。 在面板上添加一个簇,在族里分别添加一字符显示控件,数值显示控件,布尔型 显示控件,程序框图连接如图: 先解除捆绑然后再捆绑,输入姓名、学号点击运行在输出簇里显示。 6、创建一个字符串显示件,程序运行后显示当前系统日期、时间和自己的班级、姓名。

虚拟仪器LabVIEW实验报告

现代仪器设计LabVIEW实验报告 实验内容: 1.熟悉LabView软件操作方法 2.了解LabView的一般编程方法 3.虚拟信号发生器制作

1.熟悉LabView软件操作方法 虚拟仪器(virtual instrumention)是基于计算机的仪器。虚拟仪器主要是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器的研究中涉及的基理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。 LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程基本上不写程序代码,取而代之的是流程图。 前面板的设计需用控制模板。控制模板(Control Palette)用来给前面板设置各种所需的输出显示对象和输入控制对象。每个图标代表一类子模板。可以在前面板的空白处,点击鼠标右键,以弹出控制模板。 程序框图的设计需用功能模板。功能模板(Functions Palette)是创建流程图程序的工具,只有打开了流程图程序窗口,才能出现功能模板。功能模板该模板上的每一个顶层图标都表示一个子模板。可以点击“窗口”—“显示程序框图”打开,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板。

流程图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。不是几何意义上的连线,因此并非任意两个端子间都可连线,连线类似于普通程序中的赋值。数据单向流动,从源端口向一个或多个目的端口流动。不同 的线型代表不同的数据类型。下面是一些常用数据类型所对应的线型和颜色:

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

java实验报告实验六Java图形用户界面

信息工程学院 Java程序设计实习报告 JAVA图形用户界面 实验六Java图形用户界面 1.实验目的 (1)掌握图形用户界面基本组件。 (2)了解如何使用布局管理器对组件进行管理。 (3)掌握Java事件处理机制。 2.实验内容 实验题1 编写一个模拟计算器的程序,使用面板和网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式和结果显示在文本框中。 运行结果: 实验报告的内容与格式按任课教师的要求书写。

加法: 主要代码: private void initComponents() { jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); jButton8 = new javax.swing.JButton(); jButton9 = new javax.swing.JButton(); jButton10 = new javax.swing.JButton(); jButton11 = new javax.swing.JButton(); jButton12 = new javax.swing.JButton(); jButton13 = new javax.swing.JButton(); jButton14 = new javax.swing.JButton(); jButton15 = new javax.swing.JButton(); jTextField1 = new javax.swing.JTextField();

labview读取txt文档,按列取数组,画图

要读取的txt文档为两列,第一列为x坐标,第二列为y坐标,两列之间用制表符隔开,格式如下: -4.000000E+1 8.583130E-6 -3.990000E+1 9.536800E-6 -3.980000E+1 1.001360E-5 -3.970000E+1 1.049050E-5 -3.960000E+1 1.001360E-5 -3.950000E+1 1.096730E-5 -3.940000E+1 1.096730E-5 -3.930000E+1 1.096730E-5 -3.920000E+1 1.096730E-5 -3.910000E+1 1.192100E-5 -3.900000E+1 1.192100E-5 -3.890000E+1 1.096730E-5 -3.880000E+1 1.192100E-5 -3.870000E+1 1.192100E-5 -3.860000E+1 1.192100E-5 -3.850000E+1 1.192100E-5 -3.840000E+1 1.239780E-5 -3.830000E+1 1.192100E-5 -3.820000E+1 1.239780E-5 -3.810000E+1 1.192100E-5 -3.800000E+1 1.239780E-5 -3.790000E+1 1.192100E-5 -3.780000E+1 1.192100E-5 -3.770000E+1 1.144420E-5 -3.760000E+1 1.192100E-5 -3.750000E+1 1.096730E-5 -3.740000E+1 1.192100E-5 -3.730000E+1 1.096730E-5 -3.720000E+1 1.144420E-5 -3.710000E+1 1.096730E-5 -3.700000E+1 1.096730E-5 -3.690000E+1 1.096730E-5 -3.680000E+1 1.096730E-5 读取坐标数据后画图,效果如下: 1.读取直接使用函数:文件I/0——》读取电子表格文件

嵌入式图形界面设计_综合实验报告

嵌入式图形界面设计报告 班级:计算机科学与技术15-2班 小组成员:刘航征、安宝、曲晗羽 杨祎涵、张振、李雪辰 2017年12月

一、前言 天气预报(测)或气象预报(测)是使用现代科学技术对未来某一地点地球大气层的状态进行预测。从史前人类就已经开始对天气进行预测来相应地安排其工作与生活(比如农业生产、军事行动等等)。今天的天气预报主要是使用收集大量的数据(气温、湿度、风向和风速、气压等等),然后使用目前对大气过程的认识(气象学)来确定未来空气变化。由于大气过程的混乱以及今天科学并没有最终透彻地了解大气过程,因此天气预报总是有一定误差的。 最传统的数据是在地面或海面上通过专业人员、爱好者、自动气象站或者浮标收集的气压、气温、风速、风向、湿度等数据。世界气象组织协调这些数据采集的时间,并制定标准。这些测量分每小时一次(METAR)或者每六小时一次(SYNOP)。 该项目为一款天气预报软件,基于Qt5开发,具有查询指定城市天气、显示当天天气状况以及未来四天天气大致状况的主要功能,次要功能为更换软件皮肤,显示当天感冒指数等功能。 软件预览图: 二、选用的技术基本说明 1、Qt JSON操作 QJsonDocument QJsonDocument 类用于读和写JSON 文档。 一个JSON 文档可以使用QJsonDocument::fromJson() 从基于文本的表示转化为QJsonDocument,toJson() 则可以反向转化为文本。解析器非常快且高效,并将JSON 转换为Qt 使用的二进制表示。 已解析文档的有效性,可以使用!isNull() 进行查询。 如果要查询一个JSON 文档是否包含一个数组或一个对象,使用isArray() 和isObject()。包含在文档中的数组或对象可以使用array() 或object() 检索,然后读取或操作。

Labview数组

创建多维数组首先要在一维数组基础上修改维数。修改数组维数通常有以下几种方法。 (1)改变索引框大小来增减维数。将光标移至索引号四周,出现改变大小的箭头,单击鼠标拖动箭头改变索引号框的大小和索引号的个数。索引号的个数就代表数组的维数,如图1所示为拖出了两个索引号,成为二维数组,然后再改变元素区域大小以显示出二维数组。 图1 改变索引号大小以创建二维数组 (2)通过索引号的右键快捷菜单选项“添加维度”来增加数组的维数,通过选项“删除维度”来减少数组的维数,如图2所示。 (3)选择数组的右键快捷菜单选项“属性”,在弹出的属性对话框中改变数组的维数,如图3所示,在对话框“外观〃选项卡左下方的“维”数字框中即可设置维数。

图2 通过索引号的右键快捷菜单选项增减维数

图3 数组属性对话框 在前面板窗口中,可以创建上述输入控件数组,也可以创建显示控件数组。在添加元素时选择添加显示控件即可创建显示控件数组。 在程序框图窗口中可以创建数组常量。在程序框图函数选板中选择“编程-数组→数组常量”置于程序框图窗口中,出现如图4所示数组常量框架。数组常量框架类似于前面板数组框架,包括索引号和元素区域。 创建数组常量的过程与创建输入控件数组类似,设置显示的元素和增减维数的方法也相同。首先在数组常量框架中然后设置数组元素,操作过程如图5 所示。

图4 数组常量框架 图5创建数值型数组常量 首先要说明一下,LabVIEW中其实并没有明确的赋值的概念,他和传统的文本编程语言的思路不一样,是数据流驱动的编程。在一般的文本编程语言里,定义二维数组变量的时候只是开辟了一块内存空间,里面是空的,所以要有赋值的过程;而LabVIEW中内存不需要手动分配,其后台有自动管理内存的机制,出现新的二维数组的时候,不需要变量定义,直接分配内存空间,然后就把数据存进去了。如果硬要说有什么“赋值”的概念的话,LabVIEW中倒是有几种常见的类似于“赋值”的操作。 1.在二维数组控件的前面板里直接填入数值 这个最简单,不用多说想必你也明白,手动填数。 2.创建单一元素的数组 需要用到初始化数组,见下图

虚拟仪器技术Labview 课程实验报告

Labview 课程实验报告 学院:电气工程 专业:建筑电气与智能化 姓名:杨震 班级:建电122 学号:1212062056 指导老师:茅靖峰

第一部分基础题 1、用LabVIEW的基本运算函数编写以下算式的程序代码: (前面板) (程序框图) 该程序要求用labview基本运算函数编写算式的程序代码,在前面板上我添加了两个数值显示控件用以显示两个算式的运算结果;在程序框图中运用软件自带的加、减、乘、除运算进行组合从而表示算式,再结果的后面加上一个双精度浮点数函数将程序运算结果强制转换后输入到显示控件中得到结果。

2、利用摄氏温度与华氏温度的关系°C=5(°F-32)/9编写一个程序求华氏度(°F)为32°,64°,4°,6.98°,6°,104°,212°时的摄氏温度。 (前面板) (程序框图) 该程序要求转换华氏度对应的摄氏度,本质上是对数据进行运算。在前面板上创建两个数组一个是数值输入数组用以输入华氏度的值,一个是数值显示数组用以显示对应的摄氏度的值。在程序框图中加入For循环将公式节点放入For循环中在公式节点上添加一个输入和一个输出分别连接两个数值控件,最后在公式节点中编辑二者运算关系完成设计。

3、用数组创建函数创建一个二维数组显示件,成员为: 1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3 编程将上述创建的数组转置为: 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 1 5 6 1 2 6 1 2 3 (前面板) (程序框图) 先在前面板中创建二维数组用以存放生成的数组元素数组为显示型控件,通过观察我们发现题目中的数组第一行为1-6顺序的六个元素从一开始后逐一加一,第二行则是5个数组元素平移,第三行为4个以此类推第四行3个所以我们在程序框图中用For循环和加一来生成第一行数组For循环的循环次数为六次,第二行数组则在第一行数组的基础上运用一维数组平移函数平移5位的到,以此类推生成四行数组,再使用数组生成函数生成二维数组输出到显示数组中显示出来,至于数组的转置直接运用数组转置函数得到,在该函数的输出端口右键创建显示控件。在前面板中调整创建的显示控件以确保显示所有转置的数组,实验完成。

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif #include using namespace std; #include "" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0;

实验报告四图像锐化处理

姓名:学号:班级: 实验日期:实验成绩: 一.实验目的 (1)学习如何用锐化处理技术来加强图像的目标边界和图像细节,对图像进行梯度算子、拉普拉斯算子、Sobel算子设计,使图 像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。(2)分析模板大小对空域锐化滤波的影响,比较不同滤波器的处理效果,分析其优缺点。 二.实验原理 锐化处理的主要目的是突出灰度的过度部分,在空间域中,均值滤波类似于积分,那锐化滤波类似于微分,微分算子的响应程度与图像在用算子操作的这一点突变程度成正比,图像积分模糊了图像,同时起到了消除噪声的作用;图像微分增强边缘和其它突变(如噪声),而削弱灰度变换缓慢的区域,laplacian算子类似于二阶微分,强调的是图像灰度级剧烈变换的部分,而sobel算子类似于一阶微分,强调的是图像灰度级缓慢变化的部分。 三.实验内容及结果

(1)选择一副图像,分别使用拉普拉斯算子、sobel算子对图像进行锐化滤波,并观察滤波效果。 图 1 laplacian及sobel算子处理图像 (2)选择一副图像,构造一个中心系数为-24的5×5的类似于拉普拉斯模板对图像进行锐化,与上述拉普拉斯算子的结果相比,是否能得到更加清晰的结果? 图 2 不同大小laplacian模板处理原图及二值图 四.结果分析

(1)观察图一,可以发现对原图进行sobel算子运算后,原图阶梯的边缘细节被突显出来了,而每个阶梯灰度级保持不变的背景则没了,全变黑了,而对原图进行laplacian算子运算后,边缘部分则只剩下些杂乱无章的点了,基本是在sobel算子运算过后筛选出来的缓慢突变边缘上的一些突变更快的点。如果把sobel算子比作是一阶微分就不难理解它是对原图的缓慢边缘变化部分,而把laplacian算子比作是二阶微分的话,就是原图的剧烈突变部分,由于原图像的阶梯边缘在灰度级上是缓慢过度的,所以使用sobel算子边缘的突出效果更明显,而laplacian算子无论模板大小为多大,都不能清晰的显示出边缘。至于背景为什么会变黑是因为算子模板中有负因子,当计算的出来的值为负数时,自动标定其为0,也就是黑色。 (2)观察图二,可以发现对原图使用无论多大的laplacian模板,效果都很差,原因就是上述提到的原图像的边缘灰度级是缓慢变化的,对原图灰度级二值化处理,由于灰度值大小只有0和1两个值,阶梯边缘两边的值分别为0和1,这样边缘突变就成了一个单位的剧烈突变,所以3*3的laplacian算子效果就和上述的sobel算子效果相似,而当增加laplacian算子的大小到5*5时,边缘检测效果更加明显。正印证了微分算子的响应程度与图像在用算子操作的这一点突变程度成正比这一原理。

相关文档