阅读以下应用说明及Visual Basic程序,根据要求回答问题1至问题2。 [说明] 某Visual Basic应用程序用于监测某种锅炉设备内液面高度(0~50cm),其运行窗口界面如图4-16所示。 图4-16 某锅炉设备液面

admin2009-02-15  39

问题 阅读以下应用说明及Visual Basic程序,根据要求回答问题1至问题2。
   [说明]
   某Visual Basic应用程序用于监测某种锅炉设备内液面高度(0~50cm),其运行窗口界面如图4-16所示。
   
   图4-16 某锅炉设备液面高度显示界面
   在图4-16中,设计了一个高度计(矩形形状shpMeter)及其中指示当前液面高度的水银柱(矩形形状shpT),文字标签标记了液面高度的刻度;另有一个图片框picCurve,用于动态描述检测到的液面高度曲线(用户见到的曲线与水银柱等高变化);[开始](CmdStart)按钮用于启动液面高度检测,命令按钮“暂停”(CmdStop)用于暂停液面高度检测。
   液面高度计形状控件shpMeter是固定的,其属性FillsStyle默认为透明。矩形形状shpT(水银柱)的 Visible属性初始设置为不可见,属性Filltype设置为Solid(实心),FillColor设置为红色;图片框picCurve的属性AutoRedraw设置为True;程序设计过程中,创建了一个定时器TimT,属性Enabled初始设置为 False(不可用),属性Interval(定时间隔)的值应设置为(1)。
   为模拟锅炉设备液面高度的检测,程序中利用了(0,1)之间均匀分布的伪随机数获得[0,50]之间的随机液面高度WH。为便于在图片框picCurve中绘制曲线,程序中对该图片框建立了如下坐标系统:图片框的左上角定义为原点(0,0),水平向右方向为X轴,垂直向上方向为Y轴,右下角坐标为(50.200)。为了便于观察记录的液面高度值,图片框中从上到下创建了7条水平虚线Ls(i),i=0,1…6,并在程序中按等间隔排列进行位置设置。应用程序中每隔3秒算出曲线点(x, y),其中x=O,1,2……,再用直线段连接各相邻曲线点形成液面高度曲线。
   [Visual Basic程序代码]
   Dim  (2)   AS Integer                 ’试题全局变量
   Private Sub CmdStart_Click()
       TimT.Enabled =(3)  
       ShpT.Visible = True
   End Sub
   Private Sub CmdStop_Click()
       TimT.Enabled = False
   End Sub
   Private Sub Form_Load( )
       Dim i,S As Integer
       PicCurve.Scale (0,0)-(50,200)      ’设置图片框坐标系:左上角-右下角
       S = 25                             ’H等于图片框高度的1/8
       For i = 0 To 6                     ’设置7条水平线Ls(i)的位置
           Ls(i).X1 = 0                   ’Ls(i)起点横坐标
           Ls(i).Y1 =(4)               ’Ls(i)起点纵坐标
           Ls(i).X2 = 50                  ’Ls(i)终点横坐标
           Ls(i).Y2 = Ls(i).Y1            ’Ls(i)终点纵坐标
           Ls(i).BorderColor = &H00FCFCFC    ’设置水平线颜色
         (5)  
       x = 0                               ’设置曲线坐标初值
   End Sub
   Private Sub timT_Timer ( )
       Dim WH, H As Integer                ’WH为实时液面高度,H为图片框中液面高度点显示高度
       WH = Int(Rnd * 51)                  ’随机模拟产生锅炉内液面高度(0~50 cm)
       H = ShpMeter.Height *  (6)          ’算出水银柱的高度
       ShpT.Top =(7)                    ’设置水银柱顶部位置
       ShpT.Height = H                     ’设置水银柱的高度
       ’绘制液面高度曲线
       y =(8)                           ’算出曲上当前点的纵坐标
        If x = 51 Then                   ’当超出图片框时
           PicCurve. Cls                 ’清框图片框内以前画的曲线
             (9)  
       ElseIf x > 0 Then                ’除左边点外
           PicCurve. Line (x-1,Lasty)-(x,y),vbRed    ’由前1点到当前点画红色线段
       End If
       x = x + 1                         ’准备下一点坐标
       Lasty = y                         ’保存当前坐标供下次使用
   End Sub

选项

答案在Visual Basic程序中,定时器的定时间隔属性(Interval)的单位时间是:毫秒(ms)。由题干关键信息“应用程序中每隔3秒算出曲线点(x,y)…”可知,定时器TimT的定时间隔属性(Interval)值应 设置为3000毫秒,即(1)空缺处所填写的内容是“3000”。 在[暂停]按钮(cmdStop)的CmdStop_Click()事件过程中,语句“TimT.Enabled=False”使得定时器不起作用。而本应用程序是利用定时器的定时间隔来计算曲线点,在按钮[开始](cmdStart)的CmdStart_Click()事件过程中,需要启用定时器,即(3)空缺处所填写的属性值是“True”。 在定时器timT_Timer()事件过程中,利用语句“WH=Int(Rnd*51)”随机模拟实时检测到的锅炉设备的液面高度(0cm~50cm)。用随机数模拟实时检测数据是常用的方法。Rnd是由计算机产生的均匀分布在(0,1)区间内的伪随机数。每调用一次Rnd就会产生一个新的随机数。随机取若干个数据,观察其分布特性,就会发现其在(0,1)中比较均匀分布(不会过于集中在某个小段)。从而,Rnd*51产生的随机数均匀分布于(0,51),取整数部分Int(Rnd*51)后,所产生的随机数均匀分布于0,1,…,50之间。WH=Int(Rnd*51)均匀分布于0,1,…,50之间,因此,程序中可以用WH值来模拟实时检测到的液面高度。 屏幕上的液面高度计形状控件shpMeter是固定的,其高度由其Height属性决定(shpMeter.Height),其顶部离屏幕上边的距离由其Top属性决定(shpMeter.Top)。由于液面高度计形状的属性FillsStyle默认为透明,因此水银柱(shpT)高度的变化在shpMeter中将实时可见。 水银柱(shpT)的底部应固定在液面高度计(shpMeter)的底部,水银柱的高度应随液面高度WH的变化而改变。由题干关键信息“矩形形状shpT(水银柱)的Visible属性初始设置为不可见”可知,程序设计时要求:尚未开始检测液面高度时,水银柱应不可见;启动检测后,当液面高度WH=0时,水银柱的高度为0;当液面高度WH=50时,水银柱的高度应等于液面高度计的高度:对于其他液面高度,水银拄的高度应按线性规律变化。水银柱形状shpT在屏幕上的位置取决于表4-13所列的3个属性。 [*] (6)空缺处所在语句要求算出水银柱的高度,而水银柱的高度H应是液面高度WH的线性函数,其端点值如表4-14所示。 [*] 若按线性比例,由表4-14可得: [*] 解得,[*]。因此(6)空缺处应填入“WH/50”。 (7)空缺处所在语句要求算出水银柱的顶部位置值。如图4-16所示,水银柱的顶部离屏幕上边的距离(shpT.Top)应等于液面高度计离屏幕上边的距离(shpMeter.Top)加上水银柱顶部到液面高度计顶部的距离,而后者就是液面高度计的高度(shpMeter.Height)与水银柱的高度(H)之差,即 ShpT.Top=shpMeter.Top+shpMeter.Height-H 因此(7)空缺处应填入“shpMeter.Top+shpMeter.Height-H”。 根据题干的说明可得,图片框picCurve中定义的坐标系统如图4-20所示。它与直观见到的屏幕情况不同,点坐标也不是像素值。 [*] 图4-20 坐标系统示意图 在该坐标系统内,图片框picCurve上边与下边的距离为200,中间用7条水平虚线将其等分,则各条水平虚线之间的距离S=25。 最上面的第0条水平虚线Ls(0)的起点应为(0,S),终点应为(50,S)。 最下面的第6条水平虚线Ls(6)的起点应为(0,7S),终点应为(50,7S)。 对于一般的Ls(0线的起点应为(0,(i+1)S),终点应为(50,(i+1)S),因此,(4)空缺处关于“Ls(i)起点纵坐标”应填入“S*(i+1)”。 Visual Basic中,For循环语句遵循的语法格式如下。 For<循环变量>=<初值>To<终值>[Step步长] <循环体> [Exit For] Next<循环变量> 其中,For语句(也称为循环说明语句)用于指定循环变量的名称,以及循环变量的初值、终值和步长;Next是循环终端语句,其作用是改变循环变量的值(即增加一个步长)并控制是否再次执行循环体。在Next后面的循环变量与For语句中的循环变量必须相同。当只有一层循环时,Next后面的循环变量可以省略。因此,在窗体装载事件Form_Load()中,由语句“For i=0 To 6”可知,(5)空缺处的所填写的语句是“Next i”或“Next”。 (8)空缺处所在语句要求算出曲线上当前点的纵坐标。图片框picCurve中的曲线点离框下边的高度 (在坐标系统内计算)应等于液面高度值WH,但它不是图片框中的纵坐标值。液面高度WH与相应的曲线纵坐标是线性关系,其两端端点值如下: 当WH=0时,水银柱高度为0,相应的曲线点应位于图片框下边,其纵坐标应是200; 当WH=50时,水银柱最高点,相应的曲线点应位于图片框上边,其纵坐标应是0。 而当WH=25时,相应的曲线点应位于图片框纵坐标方向上的中点,其纵坐标应是100。因此,实时液面高度为WH时,相应曲线点的纵坐标值应为200-WH*4,即(8)空缺处应填入“200-WH*4”。 (9)空缺处所在语句要求设置重画曲线的初值。由于曲线点高度与水银柱高度两端点值相同,且都是线性变化,因此曲线点与水银柱必然同时等高变化。定时器TimT设置的定时时间间隔为3000ms,即每隔3秒钟就得到一个液面高度WH的值。假设图片框picCurve中以x=1,2……表示逐点记录液面高度的横坐标,则每个曲线点的坐标就是(x,200-WH*4)。在这些曲线点中,凡是与x相邻的两点都用线段连接起来,就形成了液面高度曲线。 假设当前的曲线点为(x,y),前一曲线点的坐标为(Lastx,Lasty),则Lastx=x-1。 当x=0时,计算出的只有一个曲线点G(0,y),还不能连线,所以应将其值y保存在Lasty中,以便在下个时刻计算时作为前一点的坐标。 当1≤x≤50时,应该将(Lastx, Lasty)与(x,y)两点用线段连接。 当x=51(超出图片框横坐标方向边界)时,应清除图片框中己绘制的曲线,再以x=0开始处理。因此(9)空缺处所填写的语句是“x=0”。 程序中的第一行用于声明全局变量,变量x己在Form_Load()和timT_Timer()两个过程模块中使用,因此变量x应作为全局变量。 在定时器定时触发的过程中,变量Lasty值需要进行保存工作,以供再次按下[开始]按钮重新执行 timT_Timer()过程时使用。在Visual Basic中,这个变量应作为静态变量或全局变量。在本应用程序中,没有将变量Lasty设置为静态变量,因此Lasty应作为全局变量。 综合以上分析可得,(1)空所处应填入“x,Lasty”。

解析
转载请注明原文地址:https://jikaoti.com/ti/crW7FFFM
0

最新回复(0)