# HW03 補充說明 :::info - 4/25: - 新增 3.1, 3.6 說明 - 4/27: - 新增 3.3 說明 - 3.5 勘誤:請幫我把執行程式的方式由 `./main` 改為 `./hw0305` - 3.5 增加漸層的更詳細說明 - 5/4: - 新增:畫漸層及寬度的小提示 ::: ## 3.1 Bible 1. 請自行將 `bible.txt` 從老師的網站上下載下來並包進 .zip 檔案中,助教測試前不會幫你下載。 2. 本題允許使用經 MIT、GPL 等開放原始碼 License 授權之與 JSON 檔案讀寫相關函式庫,若有使用必須將授權註解於相同檔案內否則 0 分。即便如此,仍建議自己從頭到尾練習一遍,目的是從實作面了解一份 JSON 檔案是如何讀取的。 3. 輸入及輸出範例可以此檔案為參考:https://drive.google.com/file/d/1iXaOG7vnqOLkA4r_XyWipE1buMw7TaJy/view?usp=sharing 4. 若一行有多次 target,只需要顯示一次即可 ## 3.2 Function Tracer - 輸出時格式要與作業 Example 一樣,特別注意的點有: - help 的 message 請直接與作業範例裡輸出 help 的 message 一樣 - 換行要明確 - 不包含程式碼本身縮排 - 輸出順序要明確,包括情況有: - 基於多個 c file - 基於 header file 的多個 function - 基於檔案內程式碼先後順序 > 請到下面查看範例 - 如老師上課所說: - `-F and -I are exclusive and must be at least one.` 更改為 - `-f and -i are exclusive and must be at least one.` - 只要出現 `-h` `--help` 的任何情況,就只以 `-h` `--help` 的功能為主,也就是只要 Display this information and exit. - 如果出現不存在的 option,要做錯誤輸出並離開程式。 - 可能會有輸入多個 c files 的情況,記得在輸出資訊時要明確說明資訊是從哪個檔案來的 - 如果沒有用到任何 `-f` 或是 `-i` 的 option,~~因為沒有任何要找的資源,等同於不用輸出任何內容~~。更新為: 作業有提到 `-f and -i are exclusive and must be at least one.` ,所以算判錯。 - 注意註解掉的程式碼不會算在 trace 的範圍喔 - 其他由作業範例延伸範例: - 只有 `-c` ```bash $ ./hw0302 -i mystring.h -c hw0101.c mystrchr: hw0101.c (count: 2) char *my_p = mystrchr(s, c); char *my_p = mystrchr(s, c); mystrrchr: hw0101.c (count: 1) char *my_p = mystrrchr(s, c); ``` - 只有 `-l` ```bash $ ./hw0302 -i mystring.h -l hw0101.c mystrchr: hw0101.c (count: 2) line 14 line 34 mystrrchr: hw0101.c (count: 1) line 54 ``` - 有多個 c file,並且 `mystring.h` function 出現順序為 1. `mystrrchr` 2. `mystrchr` ```bash $ ./hw0302 -i mystring.h -l -c hw0101.c hw0101_copy.c hw0101_copy2.c mystrrchr: hw0101.c (count: 1) line 54: char *my_p = mystrrchr(s, c); hw0101_copy.c (count: 1) line 54: char *my_p = mystrrchr(s, c); hw0101_copy2.c (count: 1) line 54: char *my_p = mystrrchr(s, c); mystrchr: hw0101.c (count: 2) line 14: char *my_p = mystrchr(s, c); line 34: char *my_p = mystrchr(s, c); hw0101_copy.c (count: 2) line 14: char *my_p = mystrchr(s, c); line 34: char *my_p = mystrchr(s, c); hw0101_copy2.c (count: 2) line 14: char *my_p = mystrchr(s, c); line 34: char *my_p = mystrchr(s, c); ``` - 有些算做錯誤的範例: - 不該放 parameter 的 option ```bash ./hw0302 -i mystring.h -l huh.c -c hw0101.c ``` ## 3.3 Image Steganography - `secret_data` 為檔案名稱,所以需要讀檔與寫檔。檔案為 binary file,也就是可能會是任何格式的檔案。但其實讀入後可以視為一個二進位檔案,以 bit(二進位) 方式儲存與寫入。 ex: rickroll.mp4, maldives.bmp, neokent.pdf... - (5/2) 如果 `-w` 及 `-e` 同時出現,請進行判錯 - (5/2) `secret_data` 不會存在 padding 裡 - (5/2) 假設 N=3,而你的 secret_data 有 8 bit(1 Byte) 的話,則依照 BGR 順序放入 secret_data,最後一個 R 你可以選擇將 secret_data 放在前 2 個 bit,或是後 2 個 bit ## 3.4 Game Cheater ## 3.5 RGB Line Chart - 相比前幾次助教題簡單多了,不需要提示對吧 <!--是的船長--> - 勘誤:請幫我把執行程式的方式由 `./main` 改為 `./hw0305` - 關於線的半徑與漸層的意思: ![大截圖 2024-04-26 19.04.58](https://hackmd.io/_uploads/BkljcbKZR.jpg) - 畫漸層及寬度的小提示:你們可以先嘗試畫出寬度為 1 的線,並確保他是連續的。再來以線上的每個像素點為中心,畫一個半徑為寬度的「漸層圓」。 ## 3.6 Bonus: ncurses 這次的 Bonus 要各位寫一份 Tutorial 告訴我如何用 ncurses 做出與作業圖片相同的 interface。請各位注意以下事項: 1. 檔案格式僅接受 `.txt` `.md` `.pdf`,可以使用圖片檔案(`.jpg`, `.png`)嵌入至其中,但不接受 `.odt`, `.doc`, `.docx`, `.pptx` 等其他格式。 2. 請將撰寫 Tutorial 的對象當作是沒有使用過 `ncurses` 但是是熟悉 Ubuntu 作業系統的使用者(這我),因此請在使用所有 `ncurses` 函式時介紹該函式的用意。