Private Sub Command1_Click( )
Dim i, j, k, min As Integer
Dim st, sor As String
Dim ary(1 To 10) As Integer
st = "41,39,93,19,28,21,73,25,45,16"
st = Text1.Text
sor = " "
For i = 1 To 10 Step 1
k = (i - 1) * 3 + 1
ary(i) = Val(Mid(st, k, 2))
Next i
For j = 1 To 10 Step 1
min = ary(j)
For k = j To 9 Step 1
If min > ary(k + 1) Then
tmp = ary(k + 1)
ary(k + 1) = min
min = tmp
End If
Next k
sor = sor & min & "小"
Next j
Text1.Text = st
Text2.Text = sor
End Sub
請用中文意思解釋程式碼 ?
2006-12-11 06:36:46 · 2 個解答 · 發問者 中權 1 in 電腦與網際網路 ➔ 程式設計
Dim i, j, k, min As Integer '宣告i,j,k,min為整數變數
Dim st, sor As String '宣告st,sor為字串變數
Dim ary(1 To 10) As Integer '宣告ary為陣列整數變數ary(1)~ary(10)
st = "41,39,93,19,28,21,73,25,45,16" '將""內的字串的丟給st
st = Text1.Text '將Text1輸入的文字丟給st,這裡我覺得怪怪的,不知道是你程式有指定錯還是怎樣,因為你上面已經指定一個字串給st了,你自己再確認一下
sor = " " '將sor變數清除為空的
For i = 1 To 10 Step 1 'For迴圈,從1到10,每次加1,當i=10就離開迴圈,下列的迴圈都是這個意思
k = (i - 1) * 3 + 1
ary(i) = Val(Mid(st, k, 2)) 'Val()將字串轉為數值,Mid(st,k,2)取st字串,從第k字元開始往右取2個字元,取完後丟給ary()陣列
Next i
For j = 1 To 10 Step 1
min = ary(j) '將ary()陣列的值丟給min
For k = j To 9 Step 1
If min > ary(k + 1) Then '如果min>ary()陣列就執行下一行程式
tmp = ary(k + 1) '將ary()陣列的值丟給tmp
ary(k + 1) = min '將min的值丟給ary()陣列
min = tmp '將tmp的值丟給min
End If
Next k
sor = sor & min & "小" '將sor,min,小,合併後丟給sor
Next j
Text1.Text = st '將st的值顯示在Text1
Text2.Text = sor '將sor的值顯示在Text2
2006-12-11 07:50:25 · answer #1 · answered by 水月 6 · 0⤊ 0⤋
' 變數宣告區
Dim i, j, k, min As Integer ' 宣告 i,j,k,min 為整數變數
Dim st, sor As String '宣告 st,sor 為字串變數
Dim ary(1 To 10) As Integer ' 宣告 ary 為10個位置的整數陣列變數
' 初始值設定區
st = "41,39,93,19,28,21,73,25,45,16" ' 將 "" 內的數列字串的傳給st. (根據往後的程式, 這些數值必須是二位數, 且用某個字元隔開)
st = Text1.Text ' 將 Text1 輸入的文字傳給 st. (一般這種做法是讓使用者自行輸入所要排序的數字. 它會蓋掉上面敘述的指定. 如果在測試你自己的程式, 用上面的敘述即可. 不要兩者同時並用.)
sor = " " ' 將 sor 變數清除
' 儲存原始資料到 ary 陣列
For i = 1 To 10 Step 1 ' For迴圈, 從 1 到 10, 每次加1, 當 i>10 就離開迴圈 ("step 1" 可以省略)
k = (i - 1) * 3 + 1 ' k 指標, 指向 1, 4, 7, ... 的位置 (用 k = 3*i - 2 會省一個加法的運算)
ary(i) = Val(Mid(st, k, 2)) ' Val() 會將字串轉為數值; Mid(st,k,2) 從 st 字串的第 k 字元開始, 往右取2個字元; 取完後經過 val 轉成數值再傳給 ary 陣列
Next i
' 開始排序
For j = 1 To 10 Step 1
min = ary(j) ' 將 ary(j) 的值傳給 min (因為它是目前最小的值)
For k = j To 9 Step 1 ' 設定比較的指標 k 的範圍 (用 k = j+1 To 10, 然後底下的 ary(k+1) 全改為 ary(k) 會比較清楚, 而且會省許多加法的運算)
If min > ary(k + 1) Then ' 如果 min > ary(k+1) 就執行下面交換的動作
' 將 min 和 ary(k+1) 的值交換 (請注意: ary(k) 的值並沒有動, 所以在程式最後如果把 ary(1) 到 ary(10) 印出來, 大多數會和原來的不一樣)
tmp = ary(k + 1) ' 將 ary(k+1) 的值傳給 tmp (tnp 變數沒有宣告)
ary(k + 1) = min ' 將 min 的值傳給 ary(k+1)
min = tmp ' 將 tmp 的值傳給 min
End If
Next k
sor = sor & min & "小" ' 把 min, 小, 合併後加在先前的 sor 之後
Next j
Text1.Text = st ' 將 st 的值顯示在 Text1 (顯示原始的數列字串)
Text2.Text = sor ' 將 sor 的值顯示在 Text2 (顯示排序後的數列字串)
2006-12-11 09:45:57 · answer #2 · answered by JJ 7 · 0⤊ 0⤋