2015年12月18日 星期五

電腦 語言 ( VB ) 學習的 重點



  • 基本語法的應用:不管使用那一種程式語言,底下的概念都是必備的。
    1. 資料處理的分界-資料型態
      1. 「數字」與「文字(字串)」的差別;日期、布林、不定型又是什麼?
      2. 什麼時侯要用什麼資料型態呢?
      3. 如果用錯了資料型態會怎樣呢?如何轉換資料型態變成我們預期的型態?
    2. 程式運算的重點-變數
      1. 變數是做什麼的?
      2. 常數又是什麼?
    3. 輸出
      1. 利用 Print 將資料印在表單視窗上( Form )上。
      2. 利用 MsgBox 顯示訊息視窗。
      3. 利用 Label、TextBox…等物件來顯示。
    4. 輸入
      1. 利用 InputBox() 顯示輸入視窗,以輸入資料。所有輸入的資料均被視為字串型態 String。
      2. 利用 TextBox、CheckBox、OptionBox、ComboBox、ListBox、ScrollBar等控制項物件輸入。
      3. 利用 MsgBox() 函數的回傳值當輸入值。
    5. 選擇結構-條件判斷、決策指令
      1. 判斷的結果不是真( True )就是假( False ),其型態稱為布林值,也用在邏輯運算中。
      2. 決策指令 if ... then ... else 的多種用法,包括巢狀用法。
      3. 決策指令 select case 用法。
      4. 配合邏輯運算 AND、OR、NOT 做更多條件的組合判斷。
    6. 重覆結構-迴圈指令的使用
      1. 迴圈指令 For Next 利用變數的範圍及計數來決定是否重覆執行。當不知道迴圈要執行幾次時,不適合使用。
      2. 迴圈指令 While WEnd 利用布林值的真假來決定是否要重覆執行。
      3. 迴圈指令 Do ... Loop 類似 While ,但是提供更彈性的用法,如前測式、後測式。共有 5 種變化。
    7. 結構化程式設計-副程式及函數的使用
      1. 什麼是函數(Function)、什麼是副程式(Sub)、什麼是參數、什麼是全域變數及區域變數。
      2. 什麼是內建函數?VB有哪些內建函數?了解哪些是數值函數、字串函數嗎?
      3. 如何呼叫函數、副程式?
      4. 如何自訂函數、副程式?什麼時候需要自訂函數?
    8. 大量資料的處理-陣列的應用
      1. 一維陣列的宣告及應用。
      2. 二(多)維陣列的宣告及應用。
      3. 利用陣列來儲存數字,並排序(選擇、氣泡排序法)。
    9. 把重要的資料永遠記下來-檔案的存取
      1. 檔案的概念:循序檔、隨機檔、二進位檔。
      2. 檔案的操作:開啟檔案→操作(寫入資料或讀取資料)→關閉檔案。
      3. 至少熟悉循序檔的存取。
  • VB 的物件導向設計,控制項(Control)-物件(Object)之一、屬性(attribute)、方法(method)、事件(Event)及事件程序。
    1. VB有哪些常用的控制項?這些你都要會應用。
      1. 文字標籤 Label-用來顯示文字。常配合各種控制項使用。
      2. 文字方塊 TextBox-用來輸入文字。如同 InputBox 一樣,所輸入的資料均被視為字串型態 String。
      3. 命令按鈕 CommandButton-就是按鈕。
      4. 計時器 Timer-非常常用。
      5. 核取方塊 CheckBox-用在要、不要的選擇情況。
      6. 選擇圓鈕 OptionButton-用在多選一的選擇情況。
      7. 下拉式選單、清單 ComboBox、ListBox。
      8. 影像框 Image 及 繪圖框 PictureBox
      9. 幾何形狀 Shape、Line。
      10. 水平及垂直捲軸 ScrollBar。
      11. 檔案控制項 DriverListBox、DirListBox、FileListBox。
    2. 控制項屬性的存取
      1. 在屬性視窗中設定屬性。
      2. 在程式執行時讀取屬性及設定屬性。
      3. 有的屬性只能在屬性視窗設定,有的只能在程式中設定,而大部份兩者都可。
      4. 了解各種控制項所特有的屬性及屬性值;屬性視窗下方有提供一部份說明。
    3. 控制項方法(method)的使用,類似函數的使用。
      1. 方法代表控制項所具的有行為、動作。必須在程式執行時使用。
      2. 不同的控制項有其特定的方法。

2015年12月14日 星期一

練習 2- 由小到大 (氣泡排序)

問題敘述 
給你一些數,
請幫忙排這些數由小到大。


輸入說明 
輸入共有兩列
第一列為一個正整數 N。(N <= 1000000)
第二列共有 N 個正整數,相鄰正整數之間以一個空白分隔,數值不超過 1000000000。


輸出說明 
請輸出第二列輸入中的 N 個正整數這些數由小到大排列


範例輸入 
5
6 3 4 17 9


範例輸出 
3 4 6 9 17

( VB6 解題範例 ) Ex-2.rar :   https://dl.dropboxusercontent.com/u/19927831/KH-code/AlgoVB/Ex-2.rar
----------------------------------------------------------------------------------------------------------------------
Private Sub Form_Activate()

Dim i, j As Integer
Dim B() As String
Dim bn(100) As Integer
Dim ipstr1, ipstr2, opstr As String
Dim s, x  As Variant

ipstr1 = "5"
ipstr2 = "6 3 4 17 9"
s = CDec(ipstr1)
B = Split(ipstr2, " ")


For i = 0 To s - 1
  bn(i) = CDec(B(i))
  Print bn(i);
Next i
Print

For i = 0 To s - 2
  For j = i + 1 To s - 1
    If bn(i) > bn(j) Then
      x = bn(i)
      bn(i) = bn(j)
      bn(j) = x
    End If
  Next j
Next i

For i = 0 To s - 1
  Print bn(i);
Next i

Print

End Sub

練習 1 - 找最小值


問題敘述 
給你一些數,
請幫忙找出這些數中的最小值。


輸入說明 
輸入共有兩列
第一列為一個正整數 N。(N <= 1000000)
第二列共有 N 個正整數,相鄰正整數之間以一個空白分隔,數值不超過 1000000000。


輸出說明 
請輸出第二列輸入中的 N 個正整數之最小值


範例輸入 
5
6 3 4 17 9


範例輸出 
3


(VB6 解題範例 ) Ex-1.rar :  https://dl.dropboxusercontent.com/u/19927831/KH-code/AlgoVB/Ex-1.rar
--------------------------------------------------------------------------------------------------------------------------------------

Private Sub Form_Activate()

Dim i As Integer
Dim B() As String
Dim bn(100) As Integer
Dim ipstr1, ipstr2, opstr As String
Dim n, s As Variant

ipstr1 = "5"
ipstr2 = "6 3 4 17 9"
n = CDec(ipstr1)
B = Split(ipstr2, " ")


For i = 0 To n - 1
  bn(i) = CDec(B(i))
  Print bn(i);
Next i
Print
s = B(0)

  For i = 1 To n - 1
    If bn(i) < s Then
      s = bn(i)
    End If
  Next i

Print s

End Sub

程式設計基本題目

( 資料摘自 : http://mail.cyvs.cy.edu.tw/~chunwen/vb/vb94/ )      

語言

  • 程式實作習題:底下習題難度不一,但最好都能寫出來,試試看吧。
    • 記得先把本站(2015/12/18)"電腦語言學習的重點"所提到的相關知識學會弄懂,下面的題目才有辦法做完喔!
    • 題目難度不一,但數字較大,通常代表比較難,不過在 7(含)以下的都算是簡單的。(   ~  表示難易度 )    
    • 給自己半年時間把這些題目做完
  • 下載 1~41 題所有解答 : 
      (I).    C:  下載    C 解答     Codeblock   GCC 
     (II)  VB:  下載     VB解答    
  •  練習題目 :
      
    "語法"有各題解答;     下列各題  ★為重要必解題目 
     
     " 範例下載 裡面有各題程式範例
      (rar 壓縮檔, 內涵 exe檔)
     
    1.  輸入一個數字,並判斷此數字是正數、還是負數
      語法  範例下載
    2.  輸入一個數字,並判斷此數字是奇數、還是偶數。
      語法  範例下載
    3.  輸入一個數字,並判斷此數字是否為 3 的倍數。
      語法  範例下載
    4.  輸入一個數字,並判斷此數字是否為 200 的因數。
      語法  範例下載
    5.  輸入一個數字,並判斷此數字是否介於 100 ~ 200 之間。
      語法  範例下載
    6.  輸入一個數字,並判斷此數字是否為 3 位數。
      語法  範例下載
    7.  輸入一個數字,並判斷此數字是否為 2 及 3 的公倍數。
      語法  範例下載
    8.  輸入一個數字,並判斷此數字是否為正整數。
      語法  範例下載
    9.  輸入兩個正整數,並比較這兩個正整數的大小關係(大、小、相等)。語法  範例下載
    10.  寫一程式輸入 A、B、C 三個數值,然後找出最大的數。
      語法  範例下載
    11.  輸入一個數字,如果是 1 位數的話,顯示「■」;如果是 2 位數的話,顯示「●」;如果是 3 位數以上的話,顯示「★」。
      語法  範例下載
    12.  輸入一個數字,如果是 1 的話,顯示「剪刀」;如果是 2 的話,顯示「石頭」;如果是 3 的話,顯示「布」,其餘則顯示「你輸入錯誤,請重新輸入!」。語法  範例下載 
    13.   ★    假設各人綜合所得稅係採用累進課稅方式,稅率如下,請寫一程式輸入某人的所得,然後計算應繳之稅款。語法  範例下載 
      • 所得 30 萬以內課 6%
      • 所得 30 ~ 80 萬課 13%
      • 所得 80 ~ 150 萬課 21%
      • 所得 150 ~300 萬課 30%
      • 所得 300 萬以上課 40%
    14.  ★    利用迴圈指令印出從 1 到 20 的數字。(請分別用 For、While、Do Loop) 語法  範例下載 
    15.  輸入一個數字 n,並從 1 印到 n。 語法  範例下載 
    16.  請印出 1 到 100 之間所有 6 的倍數。語法  範例下載 
    17.  連續輸入二個數字 m n,並印出從 1 到 m 之間所有 n 的倍數。語法  範例下載 
    18.  請輸入兩個四位數的正數,並比較這兩個正整數的因數個數。語法  範例下載 
    19.  計算 1+2+3+...+100 之值。(請分別用 For、While、Do Loop) 語法  範例下載 
    20.   ★    計算 1+4+7+...+31 之值。(請分別用 For、While、Do Loop) 語法  範例下載 
    21.  計算 2+5+8+...+32 之值。(請分別用 For、While、Do Loop) 語法  範例下載
    22.  計算 1+2+3+... ,當加到多少時,剛好大於 1000。(用那一種迴圈指令比較適合) 語法  範例下載
    23.   如左圖,起點座標為0,每一間隔分別為1、2、3、4、5…、請利用迴圈印出 a1 到 a8 的座標值,如果起點座標是 10 呢? 語法  範例下載
    24.  輸入 n 個數,並計算(a)總和、(b)平均、(c)最大值、(d)最小值、(e)第 2 大的數(進階)。n 的值請自行決定。
      語法  範例下載
    25.   ★    輸入兩個正整數,計算此兩數之間的質數,並利用 List 列出來。語法  範例下載
    26.   ★    請利用雙重迴圈印出九九乘法表。語法  範例下載
    27.  ★    請利用雙重迴圈分列印出下面三圖。 ( 演算法 重要練習 )
      (1). 語法  範例下載 
      (2). 重要觀念延伸學習語法 
      範例下載
      (3). 數字圖形語法 範例下載

               
    28.  如圖右,每個小方格寬 w,高 h,且左上角的座標為(0, 0),(a)
      請先找出每一小格左上角的座標公式,r 代表列,c 代表欄 (b)利用雙重迴圈及上述公式,列出所有交叉點的座標(包含邊界的點)。語法  範例下載
    29.  利用迴圈做錯誤處理及控制。請輸入一個 3 位正整數,如果輸入的數字不符合要求則顯示錯誤訊息,並要求重新輸入,直到輸入的數字符合要求為止,然後印出此數字。(試試看是否能將 1 至 8 題加上錯誤處理) 語法  範例下載
    30.   ★    輸入 1 個數字,並將此數字轉換成 2 進位、8 進位及 16 進位數字。語法  範例下載
    31.  任意輸入一數字(不限位數),判斷此數字是幾位數,並計算每位數字的總如。(請考慮輸入 003456 時,應該當成是 4 位數,總和是 18) 語法  範例下載
    32.  當x = 1、2、5、-1、-2、-5、8、9、10時計算方程式 y=x2+4x-10 的值。(利用自訂函數) 語法  範例下載
    33.   ★    請輸入二個數,並求出這兩個數的最大公因數與最小公倍數,並分別寫出算最大公因數及最小公倍數的自訂函數。( 本題可使用輾轉相除法) 語法  範例下載
    34.   輸入三個數,並利用上述的自訂函數計算最大公因數。語法  範例下載
    35.  先宣告一個一維陣列,並利用迴圈將陣列中的所有值全印出來。(如果沒有先設定過陣列的值的話,應該都是 null ) 語法  範例下載
    36.  先宣告一個一維陣列,並利用迴圈將 1 ~ 10 填入到陣列,隨後將此陣列的內容印出。語法  範例下載
    37.  利用 array() 函數,直接將「○、一、二、三、…、九」指定到陣列中,隨後將陣列的內容印出。語法  範例下載
    38.  連續輸入 10 個數,並計算第 5 個數及第 8 個數的乘績。(先利用陣列將輸入的數記錄下來) 語法  範例下載
    39.   任意輸入 10 個數(數字需控制在 0 ~ 100 之間),(a)依照輸入順序依序印出、(b)依照輸入順序反序印出、(c)列出比平均數高的所有數值、(d)請將此數由大到小依序列出(用選擇或氣泡排序法)、(e)數列中第三大的數值是第幾個輸入的數呢?請顯示。語法  範例下載
    40.   輸入二個不限長度的整數,並顯示相加的結果。(提示,利用字串當成數字,並逐字處理) 語法  範例下載
    41.  ★ 同上題,做出減法 語法  範例下載 
                             做出乘法 語法  範例下載
    42.  計算輸入的年份是否為閏年,閏年的條件為:
      • 可被 1000 整除。
      • 可被 400 整除。
      • 可被 4 整除。
      • 不可被 100 整除。
      • 口訣:逢四百年或千年閏,逢百年不閏,逢四年又閏。
    43.  今年2004年歲次甲申年,生肖猴,千禧年2000年歲次庚辰年,生肖龍,請設計一程式,用來查詢歲次及生肖。範例
      • 天干:甲乙丙丁戊己庚辛壬癸。
      • 地支:子丑寅卯辰巳午未申酉戍亥。
      • 生肖:鼠牛虎免龍蛇馬羊猴雞狗豬。
    44. 數字轉換成國字。
      • 輸入 123 轉換成「一二三」
      • 輸入 123 轉換成「一百二十三」,輸入 1000003 轉換成「一百萬零三」
    45. 輸入數字並轉換成圖形的數字,類似網頁上的計數器。下載解壓縮後,開啟 5.frm
    46. 如圖右,將 0 ~ 23 的整數填入 4 列 6 欄的二維陣列。(或 6 列 4 欄,或 3 列 8 欄)  
    47. 利用雙重迴圈將二維陣列的內容全部印出。(請配合上題,以上題二維陣列為例)
    48. 利用單層迴圈將二維陣列的內容全部印出。(請配合上題,以上題二維陣列為例)
    49. 寫一簡易成績處理程式,請參考範例。範例
    50. 利用繪圖指令及繪畫框(PictureBox)畫圖,先輸入起始座標 (m,n),並從此座標開始畫一個直角三角形(邊長比為3-4-5)。
    51. 利用繪圖指令及繪畫框(PictureBox)畫圖,先輸入起始座標 (m,n),並從此座標開始畫一個米老鼠圖形。
    52. 請將上面兩題寫成自訂副程式(輸入 m,n 兩個座標參數),以方便可以重覆畫圖形。
    53. 連續輸入 10 位同學的姓名及電話,並將之儲存在檔案中(檔名:tel.txt)。
    54. 讀取檔案(maze.txt按右鍵另存新檔)並將其內容記錄在二維陣列中,隨後將陣列中的內容印出。(檔案中的第一排數字為列數,第二排數字為欄數,第三排以後則為陣列中的值)
    55. 以上題所讀檔案內容,畫出迷宮地圖。(0 代表牆,1 代表通路,3 4 5 6 則代表障礙物或怪物),範例
    56. 在表單(或繪圖框)中劃出棋盤,如下圖左。(19 乘 19)範例
    57. 在表單(或繪圖框)中劃出黑白相間的棋盤,如下圖右。(19 乘 19)
       
    58. 在視窗中佈置一個按鈕,當按了這個按鈕後,視窗的背景顏色會變成紅色。
    59. 在視窗中佈置一個按鈕及一個圖片,當按了這個按鈕後,圖片會向→移動100個單位。(↑、↓、←、→、↘、↙、↖、↗共八個方向)
    60. 在視窗中佈置一個按鈕、文字方塊及文字標籤,當視窗大小改變時,(a)按鈕永遠保持在左下角、(b)文字方塊保持在正中央,且大小剛是視窗的一半、(c)文字標籤保持在右上角。(範例另一種範例)
    61. 請參考範例,當按了按鈕後,會顯示相對應的訊息,注意,當滑就移到題目文字的上方,顏色會變化,移開時顏色會變回來。
    62. 利用計時器控制項,不斷的變化視窗的背景。(如由黑至白、由白至黑、或由白至黑後接著由黑至白循環變化)。
    63. 利用計時器控制項,不斷的變化圖片框中的圖片。(利用 LoadPicture() 函數)。
    64. 利用計時器控制項,畫一隻嘴巴會動的小精靈。範例
    65. 請參考範例輸入國英數成績後,按「開始計算」鈕後會算出總分及平均,按「結束程式」時,會出現確認視窗後,確認後結束程式。
      • 國英數成績的輸入範圍為 0 ~ 100,要做錯誤處理。
      • 總分、平均兩個文字方塊要設定為唯讀,無法輸入。
      • 在右方圖片上按滑鼠左鍵時,會變化不同的圖片,共四張,循環變化。
    66. 請參考上題,將圖片的部份,改成會自動變化,而不需按滑鼠左鍵。範例
    67. 請參考範例1範例2,設計四則運算的計算器,請注意除法中分母不得為零,請做好錯誤處理。
    68. 請參考範例,設計簡易的圖片瀏灠器,請注意當滑鼠在不同的地方時,底下會顯示相對應的敘述文字。(這裡有另外兩種範例,請先儲存並解壓縮後再執行範例)
    69. 利用計時器控制項,讓圓球(Shape控制項)或圖片(Image)能自動移動。綜合範例綜合範例2
      • 由左到右,循環不已。(分別做出↑、↓、←、→、↘、↖、↗、↙八個方向)
      • 左右跑,循環不已。範例(上下跑也是相同做法)
      • 沿視窗邊緣繞圈圈。
      • 圓周運動。以圓形軌道運動。範例
      • 做規則彈跳,當球撞到牆壁會反彈。範例1範例2
      • 同上,但是同時可有多個球做規則彈跳,並考慮碰撞的可能。範例
    70. 讓圓球做自由落體運動,不停的彈跳。(不考慮摩擦力)範例
    71. 讓圓球做自由落體運動,不停的彈跳。(考慮摩擦力,越跳越低)
    72. 利用計時器,模擬繪製進度圖。範例1範例2
    73. 設計一程式,由鍵盤輸入一正整數 n,( 3 <= n <= 20 ),在螢幕上畫出一正 n 邊多邊形(邊長自定)。
    74. 猜拳遊戲,和電腦比賽,3 戰 2 勝制。
    75. 猜數字遊戲,由電腦亂數選一數字,並提示使用者猜的數是大或小。範例
    76. 猜數字遊戲,由電腦亂數選一個不重複的四位數字,並提示使用者猜的數字與答案的關係,如 1A2B 代表使用者所猜的數字中,有 1 個數字正確且位置無誤,有 2 個數字正確,但位置不對,剩下 1 個數字並不在答案中。範例
    77. 井字遊戲,由兩人對奕。範例,先存檔解壓縮後再執行。(進階:與電腦對奕)
    78. 身份證字號的驗證。
    79. 凱撒密文:「凱撒密文」產生的方法是將「明文」內的每一個英文字母以其在英文字母排列順序中向後移動 n 個位置遠的字母取代之,若向後移動 n 個位置之後已超出 Z 的位置,則繞到最前面 A 的位置繼續往下對應。例如 n=6 時,字母取代的方式為 A 用 G 取代,B 用 H 取代, Z 用 F 取代。請寫一程式由鍵盤輸入一字串(均為大寫英文字母)及一整數 n ( 0 <= n < 10 ),然後以 n 位位移的凱撒加密法將明文加密後輸出密文。範例
    80. 跑馬燈,由左而右及由右而左。範例
    81. 網頁滑鼠特效模擬。範例範例
    82. 繪製時鐘(a)電子鐘、數字鐘、(b)有指針的鐘。
    83. 寫出快速排序法。
    84. 龜兔賽跑。
    85. 走迷宮,利用鍵盤的方向鍵移動。範例請先下載儲存後解壓縮,執行迷宮.exe檔。
    86. 青蛙過街,利用鍵盤的方向鍵過街。
    87. 畫出會自動旋轉的太極圖。範例
    88. 利用鍵盤的方向鍵來移動物件。範例(請同時下載,並放在同一目錄下。)
    89. 畫出小精靈,並能利用鍵盤的方向鍵來移動。範例1小精靈和米老鼠
    90. 亂數排座位,輸入列及欄數,即可自動排出座位。範例1範例2範例3
    91. 成績處理:參考第 49 題,加入讀檔寫檔的功能,能將成績寫入檔案及從檔案讀出成績。
    92. 班級資料登錄,請參考範例檔。範例,請先儲存後解壓縮,再執行資料登錄.exe
    93. 簡易通訊錄:藉由輸入姓名或號碼來查詢資料。(能增加通訊錄的資料)
    94. 汽車銷售訂單:輸入客戶姓名及所訂購車種配備,計算銷售金額,並能加到訂單檔案中,也能從訂單檔案中讀出已有的訂單資料。(範例檔需配合車種價格.txt購車訂單.txt兩文字檔,請按右鍵另存新檔,並和汽車銷售訂單.exe放在同一資料夾中。)
    95. 簡易記事本,能設定字型及顏色。範例1範例2RTF文字編輯範例
    96. 請設計一程式,求出四位正整數中,最小的阿姆斯壯數。範例
      • 阿姆斯壯數是指該數(n位數)與該數之各位數的n次方和相等,則此數即為阿姆斯壯數。
      • 如「8208」即為阿姆斯壯數:8208為四位數,而各位數的四次方和「84+24+04+84」正好為「8208」,因此8208是一個阿姆斯壯數。
    97. 請設計一程式,由使用者輸入一正整數(1~200000000),判斷此數是否為一個阿姆斯壯數。
    98. 設計一程式,輸入正整數 N,印出 N!之精確值。(考慮用長數字的計算)範例
    99. 請設計一程式,可以用來計算排列組合數 P、C、H。範例
    100. 設計一個程式,計算 220、230、240 到精確的位數。(考慮用長數字的計算)範例
    101. 費伯那西數:費伯那西數的前兩個數為 1,第 3 個數以後是前兩個數的和。請依序列出前 20 個費伯那西數。範例
      • 函數定義: 當 n = 0, 1 時, f(n)=n; 當 n >=2 時 f(n) = f(n-1) + f(n-2);
      • 進階題:計算並印出 30 位數的最大費伯那西序列數之值。
      • 1 位數的最大費伯那西序列數之值為 8 。
      • 2 位數的最大費伯那西序列數之值為 89 。
      • 20 位數的最大費伯那西序列數之值為 83621143489848422977 。
    102. 遞迴 n 階方陣:輸入一正整數 n ,印出 n 階之數字方陣,其中 n 必須為 2 的 m 次方,m 為正整數,即 n 可為 1, 2, 4, 8, 16, 32, 64 ...。(右圖為 8 階之數字方陣)
    103. 綜合範例1綜合範例2
  • 給自己一年的時間,好好學習吧!Visual Basic 程式語言