課程範例與作業:

1. 收集至少五種不同型式的電腦資料(PC 除外)

2. 收集至少三種不同型式的電腦作業系統(Operating System)資料(Windows 除外)

3. 設計一個 C++ 程式,可以由鍵盤輸入一個數字 n, 計算並顯示 n 與 n 的平方至螢幕上。

4. 設計一個在 100000 個數字中挑出最小者的演算法則(Algorithm)

5. 設計一個演算法則,解決以下的問題:有 8 個外觀看起來完全相同的球,其中只有唯一的一個球比其餘的球重量輕,使用一個天平且限定只能測量三次,即必須能找出那個較輕的球。

6. 設計一個 C++ 程式,輸入兩個二元一次方程式 ax+by+c=0 與 dx+ey+f=0 的係數 a, b, c, d, e, f,聯立求解 x 與 y。

7. 設計一個 C++ 程式,輸入一個一元四次多項式 f(x) = ax^4 + bx^3 + cx^2 + dx + e 的係數 a, b, c, d, e,求出 f(x) 對 x 微分後的新一元三次多項式 f'(x) 係數,係數以降冪形式排列(由高次項至低次項排列)。

8. 設計一個 C++ 程式,輸入三個數字 a, b, c,找出並顯示其中最小者。

9. 承上題,設計一個 C++ 程式,輸入三個數字 a, b, c,排列出這三個數字由小到大的次序,例如:輸入 7 2 6,輸出為 2 6 7。

10. 承第 5 題,將演算法轉化成 C++ 程式,輸入八個數字 n1, n2, n3, n4, n5, n6, n7, n8 代表八個球的重量,輸出為較輕球的編號,例如:輸入為 5 5 5 5 5 4 5 5 ,則輸出為 6。

11. 承第 6 題,設計一個演算法,使其有能力處理 x, y 可能為『一組解』、『無解』、『無限多組解』的情形。

12. 承上題,將所設計的 Algorithm 實作成一個 C++ 程式。

13. 設計一個 C++ 程式,輸入三個數字 a, b, c,代表圓 C:(x-a)^2 + (y-b)^2 = c^2 軌跡方程式的三個參數,另外,再輸入兩個數字 x0 與 y0 代表點 P:(x0,y0) 的座標值,計算判定該點 P 與圓 C 的相對位置關係,並輸出點 P 是在 C 的『圓內』、『圓外』、或『圓上』?

14. 設計一個 C++ 程式,輸入六個數字 a, b, c, d, e, f,代表圓 C1:(x-a)^2 + (y-b)^2 = c^2 與圓 C2:(x-d)^2 + (y-e)^2 = f^2 的軌跡方程式參數,計算判定圓 C1 與圓 C2 之間的相對位置關係,並輸出這兩個圓的關係是『相交』、『相離』、或『相切』?

15. 設計一個 C++ 程式,輸入一個四位數的十六進位數字,換算並輸出這個數字的十進位表示方式在螢幕上,例如:輸入 1A6F,輸出 6767。

16. 設計一個 C++ 程式,輸入一個不限定長度的字串,計算並顯示這個字串中所有字元的 ASCII 碼在螢幕上。

17. 設計一個 C++ 程式,輸入一個不限定長度的十六進位數字,換算並輸出這個數字的十進位表示方式在螢幕上,例如:輸入 F4E,輸出 3918。

18. 設計一個 C++ 程式,輸入一個不限定長度的十進位數字,換算並輸出這個數字的十六進位表示方式在螢幕上,例如:輸入 3918,輸出 F4E。

19. 設計一個 C++ 程式,計算並顯示指定數字的倍數,執行結果如下同所示:

20. 設計一個 C++ 程式,輸入一個正整數,請計算並顯示該數的所有因數在螢幕上。

21. 設計一個 C++ 程式,輸入一個正整數,請計算並顯示該數字是否為一個質數在螢幕上。

22. 設計一個 C++ 程式,輸入一個正整數,請計算並顯示不大於該數字的所有質數在螢幕上。

23. 設計一個 C++ 程式,輸入一個正整數,請計算並顯示該數的所有質因數在螢幕上。

24. 設計一個 C++ 程式,輸入 Y1 與 Y2 兩個正整數,代表兩個西元年份,請計算並顯示西元 Y1 年與西元 Y2 年之間一共有幾個閏年(含 Y1 與 Y2 年)。

25. 設計一個 C++ 程式,輸入 10 個數字,請計算並顯示這些數字的平均值、變異數、最大值、最小值。

26. 設計一個 C++ 程式,輸入不確定個數的數字,以 -9999 代表輸入結束,請計算並顯示這些數字的平均值、變異數、最大值、最小值。

27. 設計一個 C++ 程式,輸入一個正整數,計算並顯示出該數字的階乘數,以函數的方式設計,函數的 prototype 為 int fac(int n);,傳入正整數 n,傳出 n 的階乘數。

28. 設計一個 C++ 程式,輸入兩個正整數 m 與 n,計算並顯示出 m 取 n 的組合數,以函數的方式設計,函數的 prototype 為 int combinatorial(int m, int n);,傳入正整數 m 與 n,傳出 m 取 n 的組合數。

29. 設計一個 C++ 程式,輸入一個正整數,計算並顯示出該數字的費伯那西數(Fibonacci),以函數的方式設計,函數的 prototype 為 int fab(int n);,傳入正整數 n,傳出 n 的費伯那西數。

30. 設計一個 C++ 程式,以函數的方式設計例題 26,數字輸入函數的 prototype 是 void read_data(double data[], int& n);,平均值、變異數、最大值、最小值函數的 prototype 分別是:double average(double data[], int n);double variance(double data[], int n);double maximum(double data[], int n);double minimum(double data[], int n);

31. 設計一個 C++ 程式,以函數的方式設計,輸入不定數目個數字,以 -9999 表示輸入結束,數字個數最多不超過十個,以陣列的形式儲存這些數字,將所有數字依照由小而大的次序儲存在陣列中,並顯示出排序好的結果。

32. 承例題 30、31,將除了 main 之外的所有函數定義安排在另一個函數庫(Library)檔案 lib.cpp,這些函數的 prototype 安排在名為 lib.h 的含入檔(Include File)中,使得包含 main 的主程式可以呼叫函數庫裡的函數。

33. 設計一個 C++ 程式,輸出如下圖所示的數字矩陣在螢幕上。

34. 承上題,設計一個 C++ 程式,任意輸入一個 0 至 9 的數字,決定數字矩陣左上角的第一個數字,例如:輸入 4,則在螢幕上顯示的數字矩陣如下圖所示:

35. 設計一個 C++ 程式,由鍵盤輸入一個字串,如:communication,在螢幕上所顯示的 10x10 文字矩陣的『左下角』起向上循環顯示該字串,如以下圖示所顯示:

36. 設計一個 C++ 程式,讀取一個純文字的資料檔,此資料檔中儲存 10000 筆數據資料,找出這些數字中的最大值,並顯示在螢幕上。

37. 承例題 30、36,設計一個 C++ 程式,讀取例題 36 的資料檔,利用函數設計,計算出這一萬筆資料的平均值、變異數、最大值、最小值,並顯示在螢幕上,其中函數的 prototype 與例題 30 相同。

38. 設計一個 C++ 程式,讀取一個純文字的資料檔(setosa.dat),此資料檔中儲存了 setosa 這種花形狀相關的 50 筆數據資料,每一朵花包含一組四個數字,計算這些數據的平均值,並顯示在螢幕上。

39. 承例題 31、36,設計一個 C++ 程式,讀取例題 36 的資料檔,利用例題 31 的函數設計,將這些數字排序後輸出在名為 sorted.dat 的純文字檔案中。

40. 設計一個 C++ 程式,利用 bmp 函式庫(下載),製作出紅色濾鏡,讀入全彩 BMP 格式影像,輸出另一張處理結果影像。

41. 承上題,設計一個 C++ 程式,利用 bmp 函式庫(下載),製作出 R、G、B 三色濾鏡,程式執行後輸入 1 代表執行紅色過濾,輸入 2 代表執行綠色過濾,輸入 3 代表執行藍色過濾。

42. 承上題,設計一個 C++ 程式,利用 bmp 函式庫(下載),製作反相色彩濾鏡,運用效果如下圖所示:

(處理前)(處理後)

43. 設計一個 C++ 程式,利用 bmp 函式庫(下載),將 24-bit 全彩 bmp 格式彩色圖片修改成灰階圖片,並且依舊以 24-bit 全彩 bmp 格式儲存。

44. 設計一個 C++ 程式,利用 bmp 函式庫(下載),製作色彩調整的濾鏡,避免影像色彩失真太多,運用效果如下圖所示:

(處理前)(處理後)

45. 設計一個 C++ 程式,利用 bmp 函式庫(下載),繪製如下的圖形。

46. 設計一個 C++ 程式,利用 bmp 函式庫(下載),將 24-bit 全彩 bmp 格式彩色圖片模糊化,如下圖所示,並且以 24-bit 全彩 bmp 格式儲存模糊化後的圖片影像。

(處理前)(處理後)

47. 設計一個 C++ 程式,利用 bmp 函式庫(下載),將 24-bit 全彩 bmp 格式彩色圖片特定位置加上半透明遮罩處理,輸入四個數字,前兩個數字代表指定區域的左下角座標值 X 與 Y,後兩個數字代表指定區域的寬度 W 與高度 H,如下圖所示,並且以 24-bit 全彩 bmp 格式儲存加上半透明遮罩後的圖片影像。

(處理前)(處理後)

48. 設計一個 C++ 程式,利用 bmp 函式庫(下載),將 24-bit 全彩 bmp 格式的灰階圖片利用 0 度角的臨界值矩陣(Threshold Matrix)過網,如下圖所示,並且以 24-bit 全彩 bmp 格式儲存過網後的圖片影像。

(處理前)(處理後)

49. 承上題,設計一個 C++ 程式,將 24-bit 全彩 bmp 格式彩色圖片過網成 C、M、Y、K 的四色網版圖片(同為 0 度角網版),如下圖所示:

(C 版)(M 版)
(Y 版)(K 版)

50. 承上題,設計一個 C++ 程式,以自行設計的臨界值矩陣,過出 45 度角的網版。

51. 設計一個 C++ 程式,產生一個純文字檔案(範例)。

52. 設計一個 C++ 程式,產生一個純文字檔案,檔案內容為前 10 個費伯那西數字(範例)。

53. 設計一個 C++ 程式,產生一個純文字檔案,檔案內容為不大於 10000 的所有質數。

54. 設計一個 C++ 程式,產生一個純文字檔案,此檔案內容為 A 到 Z 的字元本身與相對應的 ASCII 字元碼(範例)。

55. 設計一個 C++ 程式,產生一個純文字檔案,此檔案內容所有 0 至 127 的 ASCII 字元碼與其相對應的字元

56. 承例題 48,設計一個 C++ 程式,利用 bmp 函式庫(下載),以文字字元作為網點,將彩色圖片轉成灰階圖片進行零度角的過網動作,並儲存過網後文字檔案(執行結果範例,下載)。

57. 承上題,設計一個 C++ 程式,利用 bmp 函式庫(下載),設計另一組新的文字網點,除了濃度為 0.00% 的空白字元外,不得與上例題的字元重複,以這一組新的文字網點,將彩色圖片轉成灰階圖片進行零度角的過網動作,並儲存過網後文字檔案。

58. 設計一個 C++ 程式,利用 bmp 函式庫(下載),利用 24-bit 全彩 bmp 格式的彩色圖片產生原影像的縮圖磁磚,並以此縮圖磁磚影像製造出一張磁磚拼貼效果的新影像,如下圖所示,並且以 24-bit 全彩 bmp 格式儲存所製造的新圖片影像。

(處理前)(處理後)

59. 設計一個 C++ 程式,利用 bmp 函式庫(下載),將 24-bit 全彩 bmp 格式的彩色圖片製造出一張蒙太奇(Montage)式拼貼效果的新影像,如下圖所示,並且以 24-bit 全彩 bmp 格式儲存所製造的新圖片影像。

(處理前)(處理後)

60. 設計一個 C++ 程式,利用 bmp 函示庫(下載),將 24-bit 全彩 bmp 格式儲存的灰階圖片進行二元化處理(Binarization),如下圖所示,並且同樣以 24-bit 全彩 bmp 格式儲存二元化後的圖片影像(註:這是一張腦部核磁共振掃瞄 MRI 影像,亮部代表震動,通常就是血管的所在位置,二元化後可以清楚的發現血管,用來檢驗是否有病變存在)。

(處理前)(處理後)

61. 承上題,設計一個 C++ 程式,利用 bmp 函示庫(下載),二元化後影像再進一步去除其中的零星雜點訊號(Noise),如下圖所示,並且同樣以 24-bit 全彩 bmp 格式儲存二元化後的圖片影像。

(處理前)(處理後)

62. 設計一個 C++ 程式,產生一個如下圖所示的 PostScript 格式圖片檔案。

63. 設計一個 C++ 程式,產生一個如下圖所示的 PostScript 格式圖片檔案。

64. 承例題 56,設計一個 C++ 程式,利用 bmp 函式庫(下載),以文字字元作為網點,將彩色圖片轉成灰階圖片進行零度角的過網動作,以 PostScript 格式檔案儲存過網後的結果(執行結果範例,下載)。

65. 承上題,設計一個 C++ 程式,利用 bmp 函式庫(下載),設計另一組新的文字網點,除了濃度為 0.00% 的空白字元外,不得與上例題的字元重複,以這一組新的文字網點,將彩色圖片轉成灰階圖片進行零度角的過網動作,以 PostScript 格式檔案儲存過網後的結果。

66. 承上題,設計一個 C++ 程式,利用不同文字網點的置換,不同網點代表不同意義,進行秘密資訊的隱藏(隱像術,Steganography),作為一種防偽印刷的技術。

67. 設計一個 C++ 程式,利用 bmp 函式庫(下載),讀入一張 24-bit 全彩 bmp 格式的彩色圖片,繪製此圖片灰階的直方圖(Histogram),如下圖左上所示:

68. 設計一個 C++ 程式,利用 bmp 函式庫(下載),讀入一張 24-bit 全彩 bmp 格式的彩色圖片,繪製此圖片綠色色頻(Green Channel)的直方圖(Histogram),以 PostScript 格式檔案儲存 Histogram 圖表。

69. 設計一個 C++ 程式,可以讀入一篇英文文章的純文字檔案,顯示所有英文字母的出現頻率。

70. 設計一個 C++ 程式,讀入一個密碼檔案(下載),解出原本資料。

71. 設計一個 C++ 程式,以系統隨機亂數模擬擲骰子的過程,一共擲十萬次,顯示各點數出現的分佈狀況。

72. 設計一個 C++ 程式,以系統隨機亂數模擬台灣樂透彩的開獎過程,輸出顯示一組中獎號碼。

73. 承上題,設計一個 C++ 程式,由使用者輸入一組簽注號碼,以系統隨機亂數產生樂透彩的開獎號碼,輸出所中獎項(頭彩、二獎、三獎、四獎)。

74. 承上題,設計一個 C++ 程式,先由使用者自行設定一組開獎號碼,再由電腦隨機猜測簽注號碼一千組,顯示所有的中獎獎項與數目。

75. 設計一個 C++ 程式,以系統隨機亂數模擬特定分佈的隨機變數,產生一百個此分佈的亂數樣本。

76. 承上題,設計一個 C++ 程式,以系統隨機亂數模擬特定分佈的隨機變數,產生此隨機變數一百萬次,繪圖顯示此模擬結果的分佈狀況(Histogram)。

77. 設計一個 C++ 程式,利用 bmp 函式庫(下載),繪製如下的圖形。

78. 承上題,設計一個 C++ 程式,利用 bmp 函式庫(下載),繪製如下的圖形。

79. 設計一個 C++ 程式,讓使用者與電腦進行 1 至 1000 的『終極密碼』遊戲,電腦利用系統隨機亂數產生一個答案數字,讓玩者重複猜測,由電腦輸出所猜測數字是『比較大』或『比較小』,直到猜測正確為止。

80. 設計一個 C++ 程式,讓使用者與電腦進行『ABGame』遊戲,電腦利用系統隨機亂數產生一組相異的四個數字,讓玩者重複猜測,由電腦輸出所猜測是幾 A 幾 B(A 代表數字正確且位置也正確的數字數目,B 代表數字正確但位置不正確的數字數目),直到猜測正確為止。

81. 設計一個 C++ 程式,讓使用者與電腦進行『賓果』遊戲,電腦利用系統隨機亂數產生 5x5 的數字面版(數字 1 至 25),再由電腦以隨機亂數進行『叫號』,由使用者自行評斷是否『賓果』(連成三直線),若已經賓果則結束遊戲,否則電腦會持續叫號。

82. 承上題,設計一個 C++ 程式,讓使用者與電腦進行『賓果』遊戲,使用者與電腦各自使用不同的數字面版,再由電腦以隨機亂數進行『叫號』,由電腦評斷使用者或電腦是否『賓果』(連成三直線),若已經賓果則結束遊戲,否則電腦會持續叫號。

83. 設計一個 C++ 程式,讓使用者可以獨自進行『21 點』撲克牌遊戲,電腦利用系統隨機亂數產生一組充分洗過的撲克紙牌,讓玩者隨自己需求決定是否加牌,輸入 y 代表加牌,輸入 n 代表不加牌而結束,並顯示玩者的點數總和,若半途點數已經超過 21 點則算是輸了此牌局。

84. 承上題,設計一個 C++ 程式,與上題相反立場,讓電腦可以獨自進行『21 點』撲克牌遊戲,電腦首先利用系統隨機亂數產生一組充分洗過的撲克紙牌,再讓電腦『自行決定』是否加牌,並顯示電腦最後的點數總和,若半途點數已經超過 21 點則算是輸了此牌局。

85. 設計一個 C++ 程式,讓使用者與電腦進行撲克牌的『接龍』遊戲,使用者扮演一家,電腦扮演另外三家,輪流出牌(或蓋牌),最終由電腦計算各家的蓋牌點數,最少者為優勝。

86. 設計一個 C++ 程式,從檔案讀入一整批數字資料,由使用者輸入一筆特定數字,利用二分搜尋法(Binary Search)檢查該特定數字是否存在於所讀入的資料之中。

87. 設計一個 C++ 程式,從檔案讀入一篇英文文件,排序並顯示所有出現過的英文單字。

88. 設計一個 C++ 程式,從檔案讀入一整批學生基本資料,由使用者輸入學生姓名,利用二分搜尋法(Binary Search)找尋並顯示學生的基本資料。

89. 設計一個 C++ 程式,讀入迷宮地圖檔案,自動找出穿越迷宮的路徑。

90. 設計一個 C++ 程式,輸入一個正整數 N,以遞迴(Recurrsive)的方式,計算並顯示出 N!(N 的階乘數)。

91. 設計一個 C++ 程式,參考習題 19,輸入一個正整數 n,以遞迴(Recurrsive)的方式,計算並顯示出費伯那西(Fibonacci)數列中的第 n 個數字。

92. 設計一個 C++ 程式,輸入兩個正整數 m 與 n,以遞迴(Recurrsive)的方式,計算並顯示出 C(m,n)(m 取 n 的組合數)。

93. 設計一個 C++ 程式,尋求進行河內塔(Hanoi Tower)遊戲的解法,由使用者輸入 n,代表圓盤的數目。

94. 設計一個 C++ 程式,以指標(Pointer)達到函數 Call-by-Reference 的目的,設計一個氣泡排序程式,其中數字交換函數的 Prototype 為 void swap(int* a, int* b);

95. 設計一個 C++ 程式,以指標(Pointer)實作串列(Linked List)資料結構,來儲存一串輸入的數字(以 -9999 代表結束),並從節點開頭順著串列顯示所有數字。

96. 設計一個 C++ 程式,以指標(Pointer)實作中序式(In-order)二元樹(Binary Tree)資料結構,來儲存一串輸入的數字(以 -9999 代表結束),並從樹的根節點開始順著左右指標顯示所有數字。

97. 設計一個 C++ 程式,讓玩者可以與電腦對下 3x3 的○╳棋(tie-tac-toe)。

98. 設計一個 C++ 程式,讀入一篇文字檔案,以字元為單位,建構霍夫曼樹(Hoffman Tree)而壓縮成霍夫曼碼(Hoffman Code),並將壓縮後的文件存入新的檔案中。

99. 利用 RAD 式程式開發工具 Borland C++Builder 6(BCB6)設計一個 Windows 程式,產生一個 Windows 表單(Form)。

100. 利用 BCB 設計一個有紅色 Hello World 標籤(Label)的 Form,表單上有一個代表結束的按鈕(Button),如下圖所示:

101. 利用 BCB 設計一個可以使用數個按鈕的表單,讓使用者可以自由選擇按不同按鈕來決定標籤文字的顏色,如下圖所示:

102. 有趣的 BCB 程式。

103. 利用 BCB 設計一個可以讓使用者依據 R、G、B 三個色頻數值自行調配顏色的色版,如下圖所示:

104. 呈上題,修改上題的程式使其可以檢查使用者所輸入的數值是否介於合理範圍(0 至 255 之間的整數)。

105. 呈上題,修改上題的程式利用滑動開關(Track Bar)限制使用者所設定的數值必定介於合理範圍(0 至 255 之間的整數),如下圖所示:

106. 呈上題,修改上題的程式讓利用滑動開關(Track Bar)調整出的數值也能顯示出來,如下圖所示:

107. 利用 BCB 設計一個『連連看』遊戲,玩者選擇國家與首都進行配對,如下圖所示:

108. 利用 BCB 設計一個具有 M+、M-、MR、MC 功能的簡單計數器,如下圖所示:

109. 呈上題,修改上題的程式讓使用者可以利用面版上的按鈕輸入數字,如下圖所示:

120. 利用 BCB 設計一個『終極密碼』的猜數字遊戲,如下圖所示:

121. 呈上題,修改上題的程式讓玩者不需要輸入數字後再按『猜密碼』,直接按下 Enter 鍵即可,如下圖所示:

122. 利用 BCB 設計一個倒數計時的定時炸彈遊戲。

123. 利用 BCB 設計一個簡單的『拉霸』遊戲,如下圖所示:

124. 呈上題,修改上題的程式讓玩者可以輸入起始的賭資,每次遊戲花費 10 元,中一次頭彩獲得 100,000 元,兩個花色相同獲得 100 元,玩若干次後結算最終的結餘金額。

125. 利用 BCB 設計一個『ABGame』的猜數字遊戲,參考習題 51 的遊戲規則,如下圖所示:

126. 利用 BCB 設計一個呼叫『記事本』的簡單純文字檔案編輯器,如下圖所示:

127. 利用 BCB 設計一個呼叫『MediaPlayer』的影音媒體播放程式,如下圖所示:

128. 利用 BCB 設計一個利用內建『MediaPlayer』元件的影音媒體播放程式,如下圖所示:

129. 利用 BCB 設計一組可以在 Internet 上通訊的程式,如下圖所示:

(伺服端)

(客戶端)

(客戶端)

130. 以上題為基礎,利用 BCB 設計一個簡易的訊息雙向傳送程式,如:『Yahoo 即時通』。

131. 以第 90 題為基礎,參考習題 89,利用 BCB 設計一個網路版的『ABGame』遊戲。

132. 利用 BCB 設計一個特定影像處理功能的程式,如下圖所示: