某教室在上午8点到12点的时间段可以安排活动。为了安排尽可能多场次的活动,按以下方法安排:先安排结束时间早的活动;若有多个活动的结束时间相同,则优先安排占用时间少的活动。要求编写一个VB程序,实现上述功能。在文本框Text1中输入一批数据(数据都用逗号分隔并以逗号结尾),奇数位置数据表示某活动的起始时间,偶数位置数据表示该活动的结束时间,单击“确定”按钮Command1后,在列表框List1中显示各活动的起始和结束时间,在列表框List2中显示选择安排的活动。运行界面如图所示。
(1)
要清空Text1中的内容,可以把Text1对象的属性设置为空值。(单选,填字母:A . Caption / B . Text / C . Text.Clear)。
(2)
实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Const n = 100
Dim ss As String, t As String,
i As Integer
Dim k As Integer, p As Integer,
temp As Integer
Dim s(1 To n) As Integer, f(1
To n) As Integer
Dim num(1 To n) As Integer,
flag(1 To n) As Boolean
ss = Text1.Text
starttime = 480: endtime =
720 '教室可以安排活动时间为8:00到12:00
k = 0: p = 0
For i = 1 To Len(ss)
ch = Mid(ss, i, 1)
If
ch <> "," Then
t = t + ch
Else
p = (k - 1) \ 2 + 1
If k Mod 2 = 1 Then s(p) = convert(t)
Else f(p) = convert(t)
t = ""
End If
Next i
For i = 1 To p
num(i) = i
Next i
For i = 1 To p
List1.AddItem Str(num(i)) + " "
+ ff(s(i)) + " " + ff(f(i))
Next i
For i = 1 To p - 1
For j = p To i + 1 Step -1
If Then temp = num(j): num(j) = num(j - 1): num(j - 1) = temp temp = s(j): s(j) = s(j - 1): s(j - 1) = temp temp = f(j): f(j) = f(j - 1): f(j - 1) = temp End If Next j Next i For i = 1 To p If s(i) >= starttime And f(i) <= endtime Then flag(i) = True End If Next i List2.AddItem "活动号 起始时间 结束时间" For i = 1 To p IfThen List2.AddItem Str(num(i)) + " " + ff(s(i)) + " " + ff(f(i)) End If Next i End Sub Function convert(s As String) As Integer '把时间格式的s转换为整数,如"08:20"转化为500。代码略 End Function Function ff(t As Integer) As String '把整数t转换为时间格式,如500转化为"08:20"。代码略 End Function
(3)
程序加框处的代码有误,请改正。
答案: 【1】B
【1】k = k + 1【2】f(j) < f(j - 1) Or f(j) = f(j - 1) And s(j) > s(j - 1)【3】starttime = f(i)
flag(i) 或flag(i) = True