12.某排序算法思想如下:若有11個桶,編號從0~10,隨機產生多個整數,每產生一個整數時,就在以該整數位編號的桶中放一面小旗子,最后只要按順序數每個桶中有幾面小旗子,就能得到這幾個整數的有序排列.例如2號桶中有1個小旗子,表示2出現了一次;3號桶中有1個小旗子,表示3出現了一次;5號桶中有2個小旗子,表示5出現了兩次;8號桶中有1個小旗子,表示8出現了一次,按桶有編號順序讀出旗子數量,沒有旗子的桶略過,得到有序整數為“2,3,5,5,8”. 為此,小李編寫了一個VB程序,功能如下:運行程序,窗體加載時隨機產生6個[0,9]的隨機整數,并在列表框List1中依次顯示排序前數據,單擊“排序”按鈕Commandl,在列表框Lixt2中顯示經過上述排序算法后的數據,運行結果如第如圖2所示. 實現上述功能 的VB代碼如下,但加框代碼有錯,請改正. Dim a(10)As Integer’數組a表示桶的編號,如a(0)表示第0號桶 Private Sub Commandl-Click( ) Dim i As Integer,j As Integer For i=0 to 10 For j=1 to List2.AddItem CStr(i) Next j Next i End Sub Private Sub Form-Load Dim i As Integer Randomize For i=0 to 10’將數組初始化為0 a(i)=0 Next i For i=1 to 6’產生6個[0,9]的隨機數 t=Int(Rnd*10) a(t)=’第t桶中小旗子數量加1 List1.AddItem CStr(t) Next i End Sub.
13.小李編寫一個統計學生選考科目的VB程序,算法的基本思想是:檢查每位學生選課組合的編碼是否有效,對有效選擇結果進行科目統計,根據各科次占有效人數的百分率求出各科排名。程序運行時,單擊“顯示”按鈕Commmad1,學生選課數據顯示在列表框list1中,各科編號及對應科目名稱顯示列表框list2中,單擊“統計”按鈕Commmad2,選課結果按各科百分率由高到低顯示在列表框list3中,程序運行結果如圖所示。 實現上述功能的VB程序如下,請回答下列問題: (1)學生選課的編碼數據存儲在數據表中,其字段名為。 (2)請在橫線處填入合適的代碼。 Dim ach(1To 500)As String'存儲各學生選課編碼 Dim bno(1To 10)As Integer'存儲各科目編號 Dim bname(1To 10)As String'存儲各科目名稱 Dim bnum(1To 10)As Integer'存儲各科目被選次數 Dim bmc(1To 10)As Integer'存儲各科目被選的名次 Dim n As Integer,num As Integer Private Sub Command1_Click ( ) Dim i As Integer,km As String km=“物理化學生物政治歷史地理技術“ Dim cn As New ADODB.Connection,rs As New ADODB.Recordset,sql As String cn.Open“provider=Microsoft.Jet.jye.ai.4.0;Data Source=“+App.Path+“\students.jye.ai“ rs.Open“select*from choose“,cn Do While Not rs.EOF n=n+1:ach(n)=rs.Fields(“subject“):rs.MoveNext Loop rs.Close cn.Close Set rs=Nothing Set cn=Nothing For i=1To 7 bno(i)=i bname(i)=Mid(km,(i-1)*2+1,2) List2.AddItem Str(bno(i))+“---“+bname(i) Next i End Sub Private Sub Command2_Click ( ) Dim i As Integer,j As Integer,k As Integer Dim c As String,per As Integer For i=1To n If check(ach(i))=True Then For j=1To 3 c=Mid(ach(i),j,1) bnum(Val(c))=① Next j num=num+1 End If Next i i=1 Do While i<=7'該循環得到各學科被選人數的名次 bmc(i)=1 For j=1To 7 If bnum(j)>bnum(i) Then ② Next j i=i+1 Loop For i=1To 7 For j=1To 7 If ③ Then per=Int(bnum(j)*100/num*100)/100 List3.AddItem Str(bno(j))+“---“+bname(j)+“---“+Str(per)+“%“ End If Next j Next i End Sub Function check(s As String) As Boolean '代碼略!若學生選科代碼有效,函數返回True,否則返回False End Function