# [2019q3](http://wiki.csie.ncku.edu.tw/sysprog/schedule) 第 9 週測驗題 :::info 目的: 檢驗學員對 C 語言程式設計的認知 ::: --- ### 測驗 `1` 碎形是相當有趣的題材,參見影片 [隨機過程產生的完美圖騰](https://youtu.be/kfXl5fsVBVY) 。 考慮以下 [Sierpiński triangle](https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle) 的實作程式碼 (`tri.c`): ```cpp #include <stdio.h> #define S 78 #define SPACE (char) 32 static int out[S][S] = {0}; int triangle(int i) { static int j = 0; out[0][S/2] = KK1; for (; i < S; i++) out[j + KK2][i + KK3] = putchar(SPACE | (out[j][i + KK4] ^ out[j][i])); if (++j < 31) return triangle(puts("")); return 0; } int main() { return triangle(1); } ``` 假設終端機至少寬 81 個字元,高 44 個字元,且字型都為等寬等高,上述程式碼在執行時期可輸出下方的 [ASCII Art](https://www.asciiart.eu/),其中白色前景為 `!` (驚嘆號) 字元:  請補完程式碼。 參考資料: 1. [碎形專題 一 從 Cantor 集到碎形](https://web.math.sinica.edu.tw/math_media/d251/25101.pdf) 2. [碎形之 Sierpinski 三角形](https://openhome.cc/Gossip/OpenSCAD/Fractal.html) 3. [遞迴、碎形與數學](https://www.ithome.com.tw/voice/110732) 4. [碎形影像壓縮](https://activity.ntsec.gov.tw/activity/race-1/38/pdf/38h/222.pdf) / [圖像處理: 碎形壓縮](https://www.twblogs.net/a/5c224b1dbd9eee16b4a776b4) > 人家高中就懂這麼多,我們繼續在學店有搞頭嗎? ==作答區== KK1 = ? * `(a)` (-2) * `(b)` (-1) * `(c)` 0 * `(d)` 1 * `(e)` 2 KK2 = ? * `(a)` (-2) * `(b)` (-1) * `(c)` 0 * `(d)` 1 * `(e)` 2 KK3 = ? * `(a)` (-2) * `(b)` (-1) * `(c)` 0 * `(d)` 1 * `(e)` 2 KK4 = ? * `(a)` (-2) * `(b)` (-1) * `(c)` 0 * `(d)` 1 * `(e)` 2 :::success 延伸問題: 1. 解釋程式運作原理,指出原程式的缺失並強化; 2. 研讀 [碎形呈現演算法](http://rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93120/3/020903.pdf),嘗試透過 PNG 或 SVG 輸出 [Sierpiński triangle](https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle) 連續延伸的圖片; 3. 改寫上述程式碼為非遞迴,即 iterative 形式; ::: ---
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.