計(jì)算機(jī)考試二級VB常用算法(4):排序

字號:

1、算法說明
    1) 十進(jìn)制正整數(shù)m轉(zhuǎn)換為R(2-16)進(jìn)制的字符串。
     思路: 將m不斷除r取余數(shù),直到商為0,將余數(shù)反序即得到結(jié)果。
     算法實(shí)現(xiàn):
    Private Function Tran(ByVal m As Integer, ByVal r As Integer) As String
     Dim StrDtoR As String, n As Integer
     Do While m <> o
     n = m Mod r
     m = m \ r
     If n > 9 Then
     StrDtoR = Chr(65 + n - 10) & StrDtoR
     Else
     StrDtoR = n & StrDtoR
     End If
     Loop
     Tran = StrDtoR
    End Function
    2) R(2-16)進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制正整數(shù)。
     思路:R進(jìn)制數(shù)每位數(shù)字乘以權(quán)值之和即為十進(jìn)制數(shù)。
     算法實(shí)現(xiàn):
    Private Function Tran(ByVal s As String, ByVal r As Integer) As integer
     Dim n As Integer, dec As Integer
     s = UCase(Trim(s))
     For i% = 1 To Len(s)
     If Mid(s, i, 1) >= "A" Then
     n = Asc(Mid(s, i, 1)) - Asc("A") + 10
     Else
     n = Val(Mid(s, i, 1))
     End If
     dec = dec + n * r ^ (Len(s) - i)
     Next i
     Tran = dec
    End Function
    解題技巧
     進(jìn)制轉(zhuǎn)化的原理要清楚,同時編寫代碼時候要留意16進(jìn)制中的A-F字符的處理。
     2、實(shí)戰(zhàn)練習(xí)
    1) 補(bǔ)充代碼(2002秋二(9))
     本程序是把給定的二進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制整數(shù)。
     Private Sub Command1_Click()
     Dim a As String, b As String, c As String
     Dim L As Integer, m As Integer, n As Integer
     a = InputBox("請輸入一個二進(jìn)制數(shù)", "輸入框")
     (1)
     a = String(L, "0") & a
     (2)
     For m = 1 To n / 3
     b = Mid(a, 3 * m - 2, 3)
     (3)
     Next m
     Text1.Text = c
     End Sub
     Private Function zh(s As String) As String
     Dim i As Integer, n As Integer, p As Integer
     p = 1
     For i = 2 To 0 Step -1
     (4)
     p = p + 1
     Next i
     zh = Str(n)
     End Function
    2) 補(bǔ)充代碼(2001春二(7))
     下面程序是把給定的16進(jìn)制正整數(shù)轉(zhuǎn)換為10進(jìn)制數(shù)。
     Option Explicit
     Private Sub Form_Click()
     Dim St As Integer, Dem As Long
     St=InputBox("輸入一個十六進(jìn)制數(shù)")
     Dem=Convert(St)
     Print St; ">="; Dem
     End Sub
     Private Function Convert(S As String)As Long
     Dim N As Integer, I As Integer,Substring As String*1
     Dim P As long, K As Long,Asc1 As Integer
     N= (1)
     P=16^N
     For I=1 To N
     P=P/16
     Substring= (2)
     Select Case Substring
     Case "0" To "9"
     K=K+P*Val(Substring)
     Case (3)
     Asc1=Asc(Substring)-Asc("A")+10
     (4)
     End Select
     Next I
     (5)