资源描述
第六讲 数组与簇,*,6.1,数组,数组是,LabVIEW,常用的数据类型之一。一个数组可以是一维或者多维,如果必要,每维最多可有,2,31,1,个元素。可以通过数组索引访问其中的每个元素。索引的范围是,0,到,n-1,。数组的元素可以是数据、字符串等,但所有元素的数据类型必须一致。,6.1.1,数组的组成与创建,1.,数组的组成 由索引、数据和数据 类型构成。其中数据 类型隐含在数据中。,第六讲 数组、簇,2.,数组的创建,从前面板上创建数组:打开前面板,在控件,新式,数组,矩阵与簇,数组,如图。,再在里面放置一个数值输入控件即可,如图:,如果要显示更多的,数组成员,,在工具选项板上选择定位工具,在数组的边框停滞,当出现网状拐角后就可以拖动增加或减少显示区域。如图:,如果要增加或减少数组的,维数,,可以在索引框的快捷菜单上执行,如图:,增加后如图:,对于二维数组来说,索引框中上一个为行索引,下一个为列索引。,2,程序框图上创建数组:,在程序框图上创建数组和在前面板上创建数组有点类似,也首先创建一个外壳,然后再放入数值型常量,枚举或环形常量,字符串型常量以及布尔型常量等。刚刚放入常量后,所有的数组成员显示为灰色,可以用操作工具依次给它们赋值,赋值范围以外的数组成员保持灰色不变。如果跳过一些数组成员给后面的成员赋值,则前面的成员自动赋一个系统默认的值。,先在程序框图上放置一个数组常量,位于函数,编程,数组,数组常量,如图:,然后再往里放入一个数值常量,完成后如图:,6.1.2,数组函数,对一个数组进行操作,无非是求数组的长度、取出数组中的元素、替换数组中的元素或初始化数组等各种运算。,大家有疑问的,可以询问和交流,可以互相讨论下,但要小声点,大家有疑问的,可以询问和交流,可以互相讨论下,但要小声点,1.,数组大小,Array Size,函数 返回输入数组中的元素个数。,2.,索引数组,Index Array,函数 用于访问数组中的某个元素。,下图显示了一个索引函数的例子,它用于访问数组中的第三个元素。,将一个二维数组与,Index Array,函数相连,,Index Array,就会含,2,个索引端子。将一个三维数组与,Index Array,函数相连,,Index Array,就会含,3,个索引端子。余类推。可以使用的索引端的符号是一个黑方快,被禁止使用的索引端(,Disable Indexing,)是一个空心的小方框。,可以从一个三维数组中提取一个二维数组,方法是禁止两个索引端子,或者通过禁止一个索引端子提取一个一维数组。下图显示了从三维数组提取数组的各种方法。,3.,数组子集,Array Subset,函数 选取数组或者矩阵的某个部分。,该函数可以返回从某个指针开始的部分数组,并包括了长度元素。下图显示了一些数组子集的例子,注意,数组索引从,0,开始。,4.,替换数组元素,Replace Array Element,函数 替换数组中的某个元素。,5.,改变数组维数,Reshape Array,函数 改变输入数组的维数。,6.,初始化数组,Initialize Array,函数 对数组进行初始化,数组中所有的元素相同。,7.,建立数组,Build Array,函数 建立一个新数组的维数。,8.,移位一维数组,Rotate 1D Array,函数 将一维数组的最后,n,各元素移至数组前面。,9.,排序一维数组,Sort 1D Array,函数 将一维数组中的数据按升序排列。,10.,颠倒一维数组,Reverse 1D Array,函数 将一维数组的元素前后颠倒。结合,Sort 1D Array,函数,可实现降序排列。,11.,转置二维数组,Transpose 2D Array,函数 将二维数组进行转置输出。,12.,搜索一维数组,Search 1D Array,函数 搜索指定元素在一维数组中的位置。,13.,求数组的最大值和最小值,Array Max&Min,函数 返回数组中的最大值和最小值,以及它们在数组中的位置。,14.,截断一维数组,Split 1D Array,函数 将一维数组在指定位置截断,分成两个一维数组。当索引位置小于,0,时,第一个子数组为空;当索引位置大于数组长度时,第二个子数组为空;,15.,一维数组的插值,Interpolate 1D Array,函数 根据给定的小数索引值,确定对应的数组元素值。,16.,一维数组的阈值,Threshold 1D Array,函数 是线性插值的逆过程,根据给定的数值,确定对应的索引值。,17.,插入一维数组,Interleave 1D Array,函数 将输入端口的一维数组插入到输出的一维数组中。插入的顺序为:按从上到下的原则,依次取出输入数组的第,0,各元素,放入输出数组中;然后是第,1,各元素,依此类推。,18.,拆分一维数组,Decimate 1D Array,函数 是插入一维数组,Interleave 1D Array,函数的反运算。将输入的一维数组拆分为多个一维数组。拆分原则:第,1,个子数组:元素为输入数组的,0,n,2n,3n,第,2,个子数组:元素为输入数组的,0,n+1,2n+1,3n+1,第,3,个子数组:依此类推。,例一:,设计步骤如下:,创建一个,For,循环,循环次数定为,100,次,在数学函数中调用,Sinc,函数,重复端子作为输入,输出用一个波形图表和一个数组显示。如图:,例二:创建一个二维数组,现在已经有两组一维数组了,可以使用创建数组函数就可以把他们创建为二维数组,在一个波形图中显示,如图:,可以用鼠标对该函数进行拉伸操作,即可有两个输入端子了。,程序框图如图:,前面板运行结果如图:,例三:,初始化和分离数组:利用,For,循环的自动索引功能从一个输入数组中依次抽取各个元素,如果是大于,0,的数则添加到正数数组,如果是小于,0,的则添加到负数数组。并分别计算两个数组中各自有多少个元素。,如图所示便是程序框图,下图是在选择结构中为“假”时的情景,其中一共用到了三个数组函数,一个初始化函数,一个创建函数,一个数组大小函数,运行时前面板如图:,6.1.3,数组的特点,1.LabVIEW,会自动确定,数组长度,最多可达(,2,31,1,)个元素。,2.,数组中元素的数据类型必须相同。,6.2,簇,簇是,LabVIEW,中一个比较特别的数据类型,它可以将几种不同的数据类型集中到一个单元中形成一个整体。如有关一个学生的信息有:学号、姓名、性别、年龄、成绩和家庭地址等。如将这些项目分别定义为相互独立的简单变量,不能反映它们之间的内在联系。而应当把它们组合成一个组合项,这种数据结构就是簇。上述数据的,C,语言结构描述:上述数据的,LabVIEW,结构描述:,struct student int num;char name20;char sex;int age;float score;char addr30;,簇是一种类似数组的数据结构,用于分组数据。簇和数组有着重要的差别,其中一个重要差别是,簇可以包含不同的数据类型,而数组仅可以包含相同的数据类型。例如,一个数组可以包含,10,个数字指示器,一个簇却可以包含一个数字控件,一个开关和一个字符串控件。,尽管簇和数组的元素都是有序存放的,但访问簇的元素最好是通过释放的方法同时访问其中部分或全部元素,而不是通过索引一次访问一个元素。簇和数组的另一个差别是簇具有固定的大小。,簇通常用于将出现在框图上的有关数据元素分组管理。因为簇在框图中仅用唯一的连线表示,所以对于减少连线混乱和子,VI,需要的连接器端子个数,使用簇有着积极的效果。可以将簇看做是一捆连线,线缆中每一个连线表示簇的不同元素。在框图上,只有当簇具有相同类型,相同元素数量和相同元素顺序时,才可以将簇的子端连接。,6.2.1,簇的,创建 簇的创建框位于前面板中的控件,新式,数组,矩阵和簇,簇。,然后就可以往簇的框中添加各种类型的控件了,例如现在要建立一个学生的记录信息,包括学生的姓名,学号,性别和年龄,.,这就需要在簇外壳里依次放入两个字符串输入控件,一个数字控件和一个布尔控件,.,如图,:,与数组的创建类似,簇也可以从程序框图中创建,先在程序框图上放置一个簇外壳,然后就可以在簇外壳里放置各种数据类型常数。如图:,簇内对象的大小是可以调整的,右击簇边界,在弹出的快捷菜单中可以选择各种调节操作,如图:,选择调整为匹配大小,即可缩小簇的边框,如图为调整后的结果:,簇结构中的元素排列是按照它们放置的先后来排序的,它与簇内元素的位置无关。放入簇内的第一个元素序号为,0,,第二个元素序号是,1,,依次向下排列。如果删除了一个元素,序号将重新自动调整。簇的排序很重要,它直接影响着后面将要介绍的“捆绑”以及“接触捆绑”函数的端口顺序,如果要将一个簇与另一个簇连接,这两个簇的序和类型必须相同。,如果想要改变簇内元素的排列顺序,可以右击簇结构的边框,在弹出的快捷菜单中执行“重新排序簇中控件”,如图:,这时鼠标会变成一个带“”号的手柄箭头,黑框指出新设置的排列序号,白框表示原先的排列序号,可以改变标题栏上的“单击设置”内容,然后单击簇元素即可设置新的序号。设置完毕后单击工具栏上的“”按钮确定更改,如果想恢复原先设定值,单击“,”取消设置。,6.2.2,簇函数 簇函数,主要是访问簇中的各个元素,或由不同类型但相互关联的数据组成簇。,簇函数的模版如图:,簇函数中最主要的就是构造打包生成簇的“捆绑”函数,还有从簇中解包提取簇中元素的“解除捆绑”函数。它们是根据簇成员的顺序来进行操作的,这也说明了簇内成员顺序排列的重要性。,例,1.,创建簇,解包簇,再打包簇,该例的目的是学习使用簇的两个基本函数,如图:首先放置一个簇外壳到前面板上,将标签内容改为“输入簇”,簇函数举例:,在簇外壳中依次放入字符串控件“,Name”,布尔控件“,Sex”,,数字输入控件“,Pay”,以及字符串控件“,Address”,,通过这些簇元素来组成某一公司内一名员工的工资记录。如图:,切换到程序框图,放置一个“解除捆绑”解包簇函数,函数刚放入时,它的右侧只有,2,个输出端口,当输入端口与“输入簇”端子相连后,右侧端口会自动增加为簇元素的数目,端口从上向下排列的顺序与簇内元素的放置顺序相对应,并且数据类型也是与簇元素数据类型相对应。如图:,同样放置一个“捆绑”打包簇函数,用定位工具将输入端口的数目增加到,4,个,依次将它们与解包出来的,4,个簇元素相连,表示又把它们进行打包生成一个新的簇。在输出端口创建一个簇显示器,把标签改为“输出簇”,如图:,例,2.,替换簇成员,该例的目的是学习使用“按名称捆绑”,函数来替换簇内的某些元素。,1,新建一个,VI,,在前面板上创建一个簇外壳,依次向簇内添加一个数字输入控件,一个布尔控件,一个字符串输入控件,如图:,2,打开程序框图,选择“按名称捆绑”函数,它的功能是按照名称来替换簇成员的值。在函数刚放入时,它的左侧只有一个输入端口,将函数的“输入簇”端口与创建的簇端子相连之后,左侧端口会显示簇内第一个元素的名称数值,用操作工具单击它可以选择其他的簇成员。如图:,3,在前面板上创建一个输入控件,将标签改为“输入数字”,在程序框图将它与“数值”端口相连,表示将用它来替换簇元素。如图:,4,在“按名称捆绑”函数后面创建输出簇,完成后即可运行程序,如图:,例,3.,插接生成簇数组,该例的目的是学习使用“索引与捆绑簇数组”,函数插接簇数组函数来生成一个簇数组。,1,新建一个,VI,,打开程序框图,放置一个该函数,刚放入时它只有一个输入的端口,用定位工具拖拉它为,3,个输入端口。,2,在程序框图上放置三个数组外壳,然后分别添加字符串常量,数值常量和布尔常量,建立三个数组,如图,:,然后给他们赋如图所示的值,如图:,然后连线,并创建显示控件,如图:,运行,结果如图:,说明:该函数从输入的,3,个数组中依次取值,相同索引值的数据被攒成一个簇,所有的簇构成一个一维数组。插接成的数组的长度与所有输入数组中长度最短的一个相等,多余的数据被丢弃。,4.,建立“数组的数组”,学习把一维数组当成一个簇,然后通过建立簇的数组,因为簇数组的每一个成员都是一个簇(即一维数组),从而实现建立“数组的数组”的目的。,1,先新建一个,VI,,打开程序框图,放置一个“创建簇数组”,函数,该函数的功能是建立簇的数组,簇数组的每个成员都是一个簇。刚放入程序框图时,函数只有一个输入端口,用定位工具拖动它的边框,使它具有,3,个输入端口。,2,在程序框图上创建,3,个数值型数组,分别对它们进行赋值,第一个和第三个数组长度设定为,5,,第二个数组的长度设定为,4,。在“创建簇数组”函数的输出端口创建一个簇显示器,将簇显示器的标签内容改为“数组的数组”,如图:,3,运行程序,即可在前面板上看到结果,如图:,
展开阅读全文