当前位置: 高中信息技术 / 综合题
  • 1. (2020高三上·湖州月考) 现有n项先后出现的任务,每项任务需要一定的时间完成,且每个时刻只能执行某一项任务。任务的执行规则如下:

    每项任务有一个紧急程度,用数字表示,数字越大紧急程度越高。紧急程度最高的任务优先执行,紧急程度相同先出现先执行。若某项任务在执行过程中出现了一个紧急程度更高的任务,则正在执行的任务将被暂停,执行该紧急程度更高的任务。

    编写VB程序,功能如下:程序运行时,各项任务数据按出现时刻升序显示在列表框List1中,单击“开始”按钮Command1,按照任务完成的先后顺序,在列表框List2显示每项任务的编号以及完成时刻。程序运行界面如图所示:请回答下列问题:

    1. (1) 若有3个任务需要完成,数据如下:

      1号任务:时刻1出现,完成所需时长4,紧急程度1

      2号任务:时刻2出现,完成所需时长2,紧急程度2

      3号任务:时刻7出现,完成所需时长1,紧急程度3

      则这3个任务的完成的顺序为(单选,填字母:A . 1号、2号、3号 /B . 2号、3号、1号 / C . 2号、1号、3号)。

    2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

      Dim id(0 To 100) As Integer    '任务编号

      Dim t(0 To 100) As Integer     '出现时刻

      Dim L(0 To 100) As Integer     '完成所需时长

      Dim v(0 To 100) As Integer     '紧急程度

      Dim n As Integer      '总任务数

      Private Sub Form_Load()

       '本过程读取任务编号、出现时刻、完成所需时长和紧急程度的数据分别存储在数组 id,t,L和v中,并在List1中显示,代码略

      End Sub

      Private Sub Command1_Click()

      Dim q(0 To 100) As Integer            'q 数组按优先顺序存储已出现的任务编号

      Dim k As Integer, i As Integer, j As Integer, cur As Integer

      cur = 0: k = 0             'cur 记录当前时刻

      For i = 1 To n

        Do While k > 0 And t(i) >= cur + L(q(k))            '新的任务出现时,计算并输出已经完成的任务编号

          List2.AddItem adj(2, (id(q(k)))) + adj(6, cur + L(q(k)))

          cur = cur + L(q(k))

          k = k - 1

        Loop

        If k > 0 Then L(q(k)) =        '更新正在执行的任务的完成所需时长

          k = k + 1

          j = k

        Do While v(q(j - 1)) >= v(i)

          q(j) = q(j - 1)

          j = j - 1

        Loop

        q(j) = i

         

      Next i

      Do While  

        List2.AddItem adj(2, id(q(k))) + adj(6, cur + L(q(k)))

        cur = cur + L(q(k))

        k = k - 1

      Loop

      End Sub

      Function adj(x As Integer, v As Integer) As String

       'adj可以通过添加前置空格将v转化为x位长度的字符串,便于输出对齐,代码略

      End Function

微信扫码预览、分享更方便