2011年1月11日

BUS(匯流排)

◎ 資料匯流排有 N 條線代表:

  1. N 位元 CPU(N 位元電腦)
  2. WORD(字組)為 N 位元(bit)
  3. CPU一次可處理 N 位元資料

各種比較

◎ 記憶體存取速度(由快到慢)
暫存器(Register) > 快取記憶體(L1>L2>L3, SRAM) > DRAM(DDR2>DDR>SDRAM) > 硬碟 > 隨身碟 > 光碟(BD>DVD>CD) > 軟碟 > 磁帶


◎ I/O 連接埠速率比較(由快到慢)
SATA > SCSI > IDE > 1394 > USB > 平行埠(LPT1) > 序列埠(COM1, COM2)

PCI-E(8GB~250MB) > USB 3.0(4.8Gb)  > eSATA(3Gb) > Ultra SCSI(640MB) > SATA 3.0(450MB) > IEEE 1394b(3200Mb) > SCSI(320MB) > SATA 2.0(300MB) > SATA 1.0(150MB) > IDE(133MB) > USB 2.0(480Mb) > IEEE 1394a(400Mb) > LPT(2MB) > RS232(COM1,115.2K)    待轉換Byte、Bit。


◎ ASCII 碼字元的大小順序(由大到小)
中文字 > 小寫(a) > 大寫(A) > 數字(0) > 空白


◎ 磁碟結構的大小順序(由大到小)
磁柱 > 磁軌 > 磁簇 > 磁區



◎ 資料庫結構的大小順序(由大到小)
資料庫(Database) > 檔案(File) > 記錄(Record) > 欄位(Field) > 位元組(Byte) > 位元(Bit)

其中
「檔案(File)」又稱為「表格(Table)」。
「記錄(Record)」又稱為「Tuples」。
「欄位(Field)」又稱為「屬性(Attribute)」。



◎ 未完待續…

【自定函數】遞迴函數

自己呼叫自己的函數稱為「遞迴函數」(Recursive)。以下以二個題目說明解法。


◎ 執行下列程式片段後,K值為何?(A) 1 (B) 5 (C) 15 (D) 120      [商業語文]

Rem MAIN PROGRAM
K = GAME(5)
Print K
End

Function GAME(X)
If (X > 1) Then
   GAME = X * GAME(X - 1)
Else
   GAME = 1
End If
End Function


【答案】 (D)
【解析】
GAME(5) = 5 * GAME(4)
GAME(4) = 4 * GAME(3)
GAME(3) = 3 * GAME(2)
GAME(2) = 2 * GAME(1)


接著開始代入:
GAME(1) = 1
GAME(2) = 2 * GAME(1) = 2 * 1
GAME(3) = 3 * GAME(2) = 3 * (2 * 1)
GAME(4) = 4 * GAME(3) = 4 * (3 * 2 * 1)
GAME(5) = 5 * GAME(4) = 5 * (4 * 3 * 2 * 1) = 120。




陣列

陣列+迴圈一向是統測計概程式題的最愛,同學應在這二大部份認真的準備。

單純陣列的應考重點在於「計算陣列元素的個數」(搭配迴圈時考法會有所不同)。


VB的陣列預設由0開始,例如 Dim A(5) As Integer,其實含有 0, 1, 2, 3, 4, 5 共6個元素。
陣列也可以自己訂定,例如: Dim B(2 To 5) As Integer,則含有 2, 3, 4, 5 共4個元素。
計算的公式為 (5 - 2 + 1),亦即 (最大 - 最小 + 1)



二維陣列如 C(2, 3) 則有 (0 To 2) × (0 To 3) 共 12 個元素。計算的公式為(2-0+1)×(3-0+1)=12,
三維、四維或更多維的陣列元素計算方式都是如此。

陣列註標的起始值可以為0或是為1,如果要從1開始,只要在第一行鍵入 Option Base 1 即可。要注意的是只能是0或1,不能有其他的值。如果已經使用 Option Base 1,又想要從2或3之類的開始呢?那…就用上面說過的 Dim D(3 To 8) As Integer就可以啦…^_^。

請問下列的程式會有幾個元素呢?
Option Base 1
Dim A(0 To 3) As Integer

答案是 0,1,2,3 共4個,原因是這種有指定 m To n 的方式,是不受 Option Base 1 的限制的。


單純陣列並不會太難, 最後引一題 94 年統測的題目做為練習。

◎ 執行下列BASIC程式片段時,請問陣列A占用記憶體多少 Bytes 的儲存空間?
Dim A(3, 4) As Double
(A) 160 (B) 96 (C) 80 (D) 48



【答案】 (A)
【解析】
(3 - 0 + 1) × (4 - 0 + 1) = 20 個元素,Double 倍精準型態每個元素佔 8 Bytes,
共占用 20 × 8 = 160 Bytes。




陣列宣告後若未賦予初值,則預設的初值視宣告時的資料型態而定,
數值型態 → 初值為:「0」
字串型態 → 初值為:「空字串」
自由型態 → 初值為:「Empty」

【註】如果題目要求印一個沒有宣告的變數,例如: Print A,那是不會印出任何東東滴…^_^








【函數】字串函數

字串運算函數(在VB字串函數中,無論中英文皆視為一個字元,非Byte
函數
功能
範例
結果
Asc(X$)
將字元或字串中的第一個字元轉成ASCII
Asc(“Abc”)
65
Chr(X)
ASCII碼轉換為代表的字元
Chr(97)
a
UCase(X$)
LCase(X$)
將字串中的英文轉換為【大寫】
將字串中的英文轉換為【小寫】
UCase(“aBc”)
LCase("QoO")
ABC
qoo
Left(X$)
Right(X$)
取回字串【左起】第 n 個字元
取回字串【右起】第 n 個字元
Left(“美麗Taiwan”, 3)
Right(“美麗Taiwan”, 3)
美麗T
wan
Mid(X$)
由字串第 m 個字元起,取回 n 個字
Mid("美麗Taiwan", 2, 4)
Tai
Instr(n,X$, Y$)
X字串第 n 個字元起,找出
Y$第一個出現的位置,找不到傳回0
Instr(1, “VB is Best!”, “B”)
Instr(4, “VB is Best!”, “B”)
2
7
HEX(X)
將X轉成家六進位字串資料
Hex(16)
10
Oct(X$)
將X轉成八進位字串資料
Oct(8)
10

【函數】數值函數

函數
功能
範例
結果
Abs(X)
求X的絕對值
Abs(-20)
20
Sqr(X)
X的平方根
Sqr(4)
2
Rnd(X)
產生小於1,大於等於0的亂數
Int(Rnd*(max-min+1)+min)
Int(X)
X<0,取小於等於X的負整數
Int(5.6)
Int(-5.4)
5
-6
Fix(X)
X的整數部分。Fix(5.6) = 5Fix(-5.4) = -5
CInt(X)

()整數
小數以四捨六入取整數值
小數=5,整數為偶數小數捨去
        奇數整數+1
CInt(-3.6)
A%=5.5 Print A%
B%=6.5 Print B%
B%=6.51Print B%
C%= -3.5 Print C%
-4
6
6
7
-4
Round(X, n)
X數值轉換成小數位數n位的格式
未設表示整數。
進位部份同 CInt(逢5奇進偶吐)
Round(4.144, 2)
Round(4.145, 2)
Round(4.155, 2)
4.14
4.14
4.16
Val(X$)
X$轉為數值,碰到非數值字元則忽略其後字元(不包括空格、正負號)
Val(“52”) + Val(“47A3”)
Val(“52” + “47A3”)
Val("-1 2 3") 
99
5247
-123 
SGN(X)
X為正 1,X為負 -1X為零


【註】以下三種情況,一樣使用CInt(逢5奇進偶吐)
  1.  :例如 5.45 \ 2 = 2 , 5.5 \ 2 = 3。
  2. Mod :例如 32.5 Mod 2 = 0 , 33.5 Mod 2 = 0。
  3. 宣告為整數型態的變數
    Dim A as Integer
    A = 28.5
    Print A
    A 的值為28。 ← CInt(逢5奇進偶吐)

    不過下面的例子有點不同,請同學留意:
    Dim A as Integer
    A = Sqr(8)   ← 求 8 的平方根
    Print A
    A 的值為3。 ← 原因是 Sqr(8) = 2.82842712474619…,為無理數。


    2011年1月10日

    Select Case 子句用法

    ◎ 在 Select Case 敘述中,下列有關 Case 子句的用法,何者錯誤?
    (A) Case 0 To 10 (B) Case Is > 10 (C) Case Is > 10 And Is < 50 (D) Case 3, 5, Is > 10




    【答案】 (C)
    【解析】

    (C)選項的答案,並不符合Select Case的用法。


    • Select Case 的子句大抵有3種用法:
    1. 運算式,運算式,…      → 例如: Case 1, 3, 5
    2. 運算式1 To 運算式2       →    例如: Case 40 To 60
      注意:運算式2必須大於運算式1,否則不成立!
    3. Is 關係運算式(<, <=, =, >=, >)  → 例如: Case Is <= 100
    4. 以上三項可以混合使用     → 例如:   Case 2, 8, 10 To 12, Is > 20 

    • 若符合多個 Case 條件,僅會執行第一個符合的 Case。

    Select Case 條件判斷式

    ◎執行下列程式,若輸入「12.8」,則輸出結果為何? (A)12.8 (B)12 (C)11.8 (D)15.8


    Private Sub Form_Activate()
    A = InputBox("請輸入一個數")
    Select Case (A Mod 3)
    Case (6 ^ 2 = True)
        A = A + 1  Rem 這樣的條件式並不會成立!
    Case 1
        A = A - 1
    Case 2
        A = A - 2
      Case Else
        A = A + 3
    End Select
    Print A
    End Sub




    【答案】 (C)
    【解析】
    1. 同學解題時,凡運算式遇到「\(整除)」、「Mod」時,必須將小數以「CInt(逢5奇進偶吐)」的方式轉成整數。本題中的(A Mod 3) = (12.8 Mod 3) = 1。
    2. 注意其中的 A 仍為12.8,並未被改變,故 12.8 - 1 = 11.8。