a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 72|回复: 1

[考试试题] 计算机等级考试二级VB常用算法(4):进制转化

[复制链接]
发表于 2012-7-31 22:15:04 | 显示全部楼层 |阅读模式
  " N0 w6 A% @( _1 {$ N
1、算法说明 + @" _* I: _: {9 F* |
1)        十进制正整数m转换为R(2-16)进制的字符串。
- n9 t6 l( Y7 G0 H         思路: 将m不断除r取余数,直到商为0,将余数反序即得到结果。
% e' @/ i) }7 s         算法实现:
. x+ {4 Z  {% [3 Z( B% C/ V# NPrivate Function Tran(ByVal m As Integer, ByVal r As Integer) As String 4 F4 a2 H% C# n4 Q
    Dim StrDtoR As String, n As Integer 5 S  P. D. W' [8 `
    Do While m  o 9 @4 V0 N* t: m" b( U# p( m7 v
        n = m Mod r : v$ c* e4 Q" ]" E) ~1 q7 B, |
        m = m \ r 3 v: N: M$ r- ?8 U/ X7 E
        If n > 9 Then
5 Y- t; |' A! I& x  D! n* Q) E            StrDtoR = Chr(65 + n - 10) & StrDtoR
3 B' ]/ U! l/ k$ t        Else ! Z4 M, u  e$ r/ H7 F0 ~
            StrDtoR = n & StrDtoR
4 Z' j1 ~3 Z: N  [        End If
$ l# u; }& h3 t' F    Loop * p5 s( b( N- Y. O8 g2 |1 ^
    Tran = StrDtoR & j0 {) g+ d6 N( d- m( G
End Function  
3 i& O. y8 Y0 U3 N, P, h; W2)        R(2-16)进制字符串转换为十进制正整数。
3 H, F+ ?* q9 U+ d' K4 J6 W         思路:R进制数每位数字乘以权值之和即为十进制数。
: F. \* ^. X+ v; O         算法实现:
: c& Y% J/ T# j4 Q" f# v9 n' i( }Private Function Tran(ByVal s As String, ByVal r As Integer) As integer
! d* {$ i8 u; o/ d    Dim n As Integer, dec As Integer 3 R& G. I9 R( L' A$ y/ a
    s = UCase(Trim(s)) ' O! k9 v% W4 |4 q( N/ I* y/ y
    For i% = 1 To Len(s) " x8 C  x, y9 t& E
               If Mid(s, i, 1) >= "A" Then
; U) F5 b, b/ `; p$ J$ b                        n = Asc(Mid(s, i, 1)) - Asc("A") + 10
- h6 ]4 Z, n- M9 |6 Q               Else * G& a; f  J% g% b" X5 _) C2 o5 d
                        n = Val(Mid(s, i, 1)) " a  Y5 X: N+ E* j
               End If . F' l' A5 J7 V" _; E: f
               dec = dec + n * r ^ (Len(s) - i)
8 p/ S: N0 _* ]    Next i
' Y( x8 _4 i% c) ^2 U+ @$ Z    Tran = dec " J$ Y7 b! P( K; f, r% I! x$ j
End Function
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:15:05 | 显示全部楼层

计算机等级考试二级VB常用算法(4):进制转化

</p>  
; h' ]$ Z! R& M, z" r( |' [/ ~! t( i4 A) k; |# a
解题技巧
9 m5 B( l( d" V, m         进制转化的原理要清楚,同时编写代码时候要留意16进制中的A-F字符的处理。
" _' m/ R4 G5 X$ e# C 2、实战练习 7 g( v* N. x* p, M9 q
1)        补充代码(2002秋二(9))
+ z9 l: \, h; ?3 L& C         本程序是把给定的二进制整数转换为八进制整数。
: ?, _: u4 K% [/ ~3 N7 o; b3 V                  Private Sub Command1_Click()
8 M+ |# F# z6 H; d0 ~: g                           Dim a As String, b As String, c As String
' j5 G- A# e$ x3 R# Y# A1 c                           Dim L As Integer, m As Integer, n As Integer 6 D& p8 @$ n5 l4 l- o" v# {
                           a = InputBox("请输入一个二进制数", "输入框") 2 _5 Q' e+ Q9 o, ^  Q$ }
                              (1)     $ M# \$ Z' [( X( D) ^) ?8 q
                           a = String(L, "0") & a
/ v5 T1 {' C* J/ m  b$ N' d                              (2)     
$ x% [+ w$ Z, Q2 A# t                           For m = 1 To n / 3 , p! x9 x" R$ s9 L; r" W, k
                             b = Mid(a, 3 * m - 2, 3) - n' A4 x# k' h. p- E! ]4 q
                                 (3)      
, O; K' @4 \  O: Q                           Next m 9 @: F- F' }/ J7 J+ ~
                           Text1.Text = c
! k1 K, ~: I! P: W5 H8 e. [6 Q                  End Sub                    Private Function zh(s As String) As String
4 ^: J& t6 O* C) j$ t: p                           Dim i As Integer, n As Integer, p As Integer : B7 e- A1 p0 E! U
                           p = 1 . h3 q  ^! G9 l% \* K7 K; K, w
                           For i = 2 To 0 Step -1
6 @) b0 j  J$ _                                       (4)      + c5 j/ S6 d) W( ^' G
                              p = p + 1
4 Y8 F, P: p1 L( Q3 \3 u" l                           Next i ; R7 g5 n' c# ^3 N  _
                           zh = Str(n)
3 R5 K8 @/ M6 {                  End Function 4 s) U4 j+ c6 h/ M8 y4 h0 W
2)        补充代码(2001春二(7))
8 u0 I. D  j" `0 M6 i         下面程序是把给定的16进制正整数转换为10进制数。 - D2 U8 N" a6 ?: |. T& g$ T5 k
                  Option Explicit   ^6 p( G6 |7 B2 Y; ~' g9 R% R+ O* \
  z! p  ^5 V# f* {  N, w; p' n
                   Private Sub Form_Click() ; i" l) i8 [3 J$ Y7 f4 t
                           Dim St As Integer, Dem As Long 7 N& _" J; a  o
                           St=InputBox("输入一个十六进制数") - B5 K# C3 i/ f- X; s( z4 s! m
                           Dem=Convert(St)
6 R8 g6 g* L$ a0 U2 E. l$ w+ x% K: I                           Print St; ">="; Dem
% m) [! a! }( T( u, E( C, J4 ]% @                  End Sub                    Private Function Convert(S As String)As Long 6 E5 D) ^+ n9 Q
                           Dim N As Integer, I As Integer,Substring As String*1 6 s; u4 S* y* p$ X
                           Dim P As long, K As Long,Asc1 As Integer : V+ F; a) {/ ^
                           N=  (1)   ! n8 b  o- @: D% U7 ^6 W8 I' m
                           P=16^N
) C8 U  x" _; P3 O' N                           For I=1 To N
9 }) t( h, u* E7 o: ~                                    P=P/16 - \. [- z! s- F+ z
                                    Substring=  (2)   ) ~$ O3 G3 L8 F0 j
                                    Select Case Substring , o" @6 z/ C$ [( [; X' @, @
                                             Case "0" To "9"
+ m5 w- u# p) C, U7 x                                                      K=K+P*Val(Substring)
0 |* O; {0 T7 h, ?2 G# g. F) F                                             Case   (3)   6 `. s7 y/ H: M! A) J" p
                                                      Asc1=Asc(Substring)-Asc("A")+10 ; F) a' T) [+ L, N& \
                                                        (4)   ; V" x" l1 G4 ~$ U# R! ^
                                    End Select ; E+ m# R3 l5 k  K5 d
                           Next I
- f% |% [  T' D/ Y. X                             (5)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-20 01:52 , Processed in 0.200858 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表