演算法練習要實現的目標
1.做1個窗體、包含兩個文本框
2.在Access文本框里加入25個隨機數字
3.要求數字不重複
4.按照從小到大排序
最終實現的效果
主要應用技術:
1.ForNext防止重複
2.冒泡演算法排序
練習步驟
步驟1:製作輸出端(窗體)
做兩個文本框、兩個按鈕控制項。一個文本框用於展示不重複的排列情況,另一個文本框用於展示有重複的情況。
步驟2:生成25個隨機數(1-30),並要求不重複
代碼如下
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
For j = 1 To i - 1 '這段是防止重複的代碼
If a(i) = a(j) Then '如果重複了再次選擇
i = i - 1
End If
Next j
Next i
步驟2技術要點是建立一個數組a,利用一個ForNext進行數組賦值。
難點是對25個隨機數進行去重操作。方法是引入一個新變數j,每生成一個數字就跟上一個數字進行比較,如果相同就重新進行選擇。利用的也是ForNext操作。
去重操作代碼
For j = 1 To i - 1 '這段是防止重複的代碼
If a(i) = a(j) Then '如果重複了再次選擇
i = i - 1
End If
Next j
步驟3:用冒泡演算法進行排序
冒泡演算法的核心思想是引入一個中間變數t,不停地比較相鄰的數字。冒泡演算法核心思想是把大數往下壓、小數往前擠出。如同氣泡往前走一樣。我會另外寫一篇文章介紹冒泡演算法,本文只做簡單介紹。
代碼如下:
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i) 't作為中間變數,冒泡演算法常見
a(i) = a(j)
a(j) = t
End If
Next j
Next i
25個數字生成和數字排序設定在一個sub下,通過點擊一次按鈕即可操作
步驟4:對輸入段進行分行操作
為了便於演示,25個數字要進行分行。每數到5進行一次回車。
tempStr是中間變數,用途是將數字分隔開,並逢5的倍數進行回車操作。運用If函數進行區分。
Chr(13)和Chr(10)是計算機的回車符號。
For i = 1 To 25
Text1 = Text1 + tempStr + CStr(a(i)) 'CStr轉換成字元串
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " " '換行
Else
tempStr = " "
End If
Next i
完整代碼
Option Compare Database
Dim i As Integer
Dim j As Integer
Dim tempStr As String '中間變數,用於數列分行
Dim a(1 To 25) As Double '數組一共25個數字
Dim t As Double '中間變數,排序用
Private Sub Command1_Click()
Text1 = ""
tempStr = " "
'下面這段是生成不重複的25個數字,從1-30的數字里選擇
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
For j = 1 To i - 1 '這段是防止重複的代碼
If a(i) = a(j) Then '如果重複了再次選擇
i = i - 1
End If
Next j
Next i
'這段是排序,運用冒泡演算法
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i) 't作為中間變數,冒泡演算法常見
a(i) = a(j)
a(j) = t
End If
Next j
Next i
'這段是在文本框里生成25個數字
For i = 1 To 25
Text1 = Text1 + tempStr + CStr(a(i)) 'CStr轉換成字元串
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " " '換行
Else
tempStr = " "
End If
Next i
End Sub
Private Sub Command2_Click()
Text2 = ""
tempStr = " "
'下面這段是生成的25個數字(有可能重複),從1-30的數字里選擇
For i = 1 To 25
a(i) = Int(30 * Rnd + 1)
Next i
'這段是排序,運用冒泡演算法
For i = 1 To 25 - 1
For j = i + 1 To 25
If a(i) > a(j) Then
t = a(i)
a(i) = a(j)
a(j) = t
End If
Next j
Next i
'這段是在文本框里生成25個數字
For i = 1 To 25
Text2 = Text2 + tempStr + CStr(a(i))
If i = 5 Or i = 10 Or i = 15 Or i = 20 Or i = 25 Then
tempStr = Chr(13) + Chr(10) + " "
Else
tempStr = " "
End If
Next i
End Sub
.